1. 程式人生 > >opencv筆記(2)操作畫素

opencv筆記(2)操作畫素

1、Mat類包含多種方法,可用來訪問影象的各種屬性:

cols和rows可得到影象的列數和行數。(column、rows)

Mat的at(int y,int x)方法訪問元素。

在呼叫at方法時,必須指定影象元素的型別。

image.at<uchar>(j,i)=255;

at方法不會進行任何型別轉換,程式碼必須保證指定的型別與矩陣內的型別是一致的。

2、cv::Vec3b包含三個無符號字元型別的資料。

image.at<cv::Vec3b>(j,i)=cv::Vec3b(255,255,255)。

3、reshape(x,y)第一個引數是新的通道數,第二個引數是新的行數。列數會進行自動修改。

這樣可以去掉外層迴圈,ps:變成了1列或者1行。

4、影象資料是存放在無符號字元型的記憶體塊中的。其中data屬性表示記憶體第一個元素的地址,它會返回一個無符號字元型的指標。

如果從影象的起點迴圈:uchar *data=image.data

用step屬性可以得到一行的總位元組數。data+=image.step;

5、迭代器

要建立一個cv::MatIterator_物件。跟cv::Mat_類似,這個下劃線表示它是一個模板子類。

cv::MatIterator_<cv::Vec3b> it;

也可以使用在Mat_模板類內部定義的iterator型別。

cv::Mat_<cv::Vec3b>::iterator it;

6、高效處理。

位運算>模運算>整數運算。

不要在掃描影象時使用迭代器,迭代器比較慢。