opencv關於畫素操作的彙總2

2021-07-02 21:52:46 字數 1412 閱讀 7039

任何影象處理演算法,都是從操作每個畫素開始的。即使你不會使用opencv提供的各種影象處理函式,只要你了解影象處理演算法的基本原理,也可以寫出具有相同功能的程式。在opencv中,提供了種訪問每個畫素的方法:使用at方法、使用迭代器、使用指標。

這三種方法在訪問速度上略有差異。debug模式下,這種差異非常明顯,不過在release模式下,這種差異就不太明顯了。我們通過一組程式來說明這幾種方法,程式的目的是減少影象中顏色的數量,比如原來的影象是是256中顏色,我希望將它變成64種顏色,那我只需要將原來的顏色除以4(整除)以後再乘以4就可以了。

先看主程式:

[cpp]view plain

copy

#include 

#include 

#include 

using

namespace

std;  

using

namespace

cv;  

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv);  

intmain()    

主程式中呼叫colorreduce函式來完成減少顏色的工作:

下面是使用at方法的colorreduce函式,這種方法簡潔明瞭,符合大家對畫素的直觀認識。執行時間為0.334131。

[cpp]view plain

copy

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv)  

}  }  

下面是使用迭代器的colorreduce函式,這種方法與stl庫的用法類似。執行時間為0.375629

[cpp]view plain

copy

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv)  

}  最後是使用指標的方法,這種方法最快,但是略有點抽象。執行時間為0.00705378!

[cpp]view plain

copy

void

colorreduce(mat& inputimage, mat& outputimage, 

intdiv)  

}  }  

[cpp]view plain

copy

順便說一句,opencv中的彩色影象不是以rgb的順序存放的,而是bgr,所以程式中的outputimage.at(i,j)[0]代表的是該點的b分量。同理還有(*it)[0]。

opencv中關於畫素的常見操作

一 獲取影象畫素指標 mat.ptr int i 0 獲取畫素矩陣的指標,索引i表示第幾行,從0開始計行數。獲得當前行指標const uchar current myimage.ptr row 獲取當前畫素點p row,col 的畫素值 p row,col current col 二 畫素範圍處理s...

opencv畫素操作

1 bit depth 位元數 代表8bite,16bites,32bites,64bites 舉個例子吧 比如說,如 如果你現在建立了乙個儲存 灰度的mat物件,這個影象的大小為寬100,高100,那麼,現在這張 灰度中有10000個畫素點,它每乙個畫素點在記憶體空間所佔的空間大小是8bite,8...

OpenCV 操作畫素(訪問畫素值)

為構建計算機視覺應用程式,我們需要學會訪問影象的內容,有時也要修改或者建立影象。本章將講講如何操作影象的元素 即畫素 影象本質上就是由陣列組成的矩陣。opencv使用了cv mat結構來操作影象。矩陣中的每乙個元素表示乙個畫素。對灰度影象而言,畫素是8位無符號數 資料型別為unsigned char...