opencv筆記(2)操作畫素
阿新 • • 發佈:2018-12-05
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、高效處理。
位運算>模運算>整數運算。
不要在掃描影象時使用迭代器,迭代器比較慢。