opencv c++ mat獲取像素及像素賦值
For accessing pixel's channel value :
for (int i = 0; i < image.cols; i++) { for (int j = 0; j < image.rows; j++) { Vec3b intensity = image.at<Vec3b>(j, i); for(int k = 0; k < image.channels(); k++) { uchar col = intensity.val[k]; } } }
For changing a pixel value of a channel :
uchar pixValue; for (int i = 0; i < image.cols; i++) { for (int j = 0; j < image.rows; j++) { Vec3b &intensity = image.at<Vec3b>(j, i); for(int k = 0; k < image.channels(); k++) { // calculate pixValue intensity.val[k] = pixValue; } } }
附錄:引用
http://www.cppblog.com/gtwdaizi/articles/38521.html
C++返回引用類型 指針的引用
C++返回引用類型
A& a(){ return *this;} 就生成了一個固定地址的指針,並把指針帶給你
但A a() { return *this;}會生成一個臨時對象變量,並把這個臨時變量給你
這樣就多了一步操作
當返回一個變量時,會產生拷貝。當返回一個引用時,不會發生拷貝,你可以將引用看作是一個變量的別名,就是其他的名字,引用和被引用的變量其實是一個東西,只是有了兩個名字而已。
問題的關鍵是,當你想要返回一個引用而不是一個拷貝時,你要確保這個引用的有效性,比如:
int & fun() { int a; a=10; return a; }
這樣是不行的,因為a會在fun退出時被銷毀,這時返回的a的引用是無效的。
這種情況下,如果fun的返回類型不是int & 而是int就沒有問題了。
指針的引用
GetNearestFontInTwips(CFont *&aFont, const TFontSpec &aFontSpec);
第一個參數aFont是一個指針, 前面加上*&表示指針的引用, 其實可以如下看待這個方式(CFont*) &aFont, 這就一目了然了.
// image.at返回的是引用,將引用賦值到intensity Vec3b intensity = image.at<Vec3b>(j, i); //intensity是image.at返回的引用的另一個別名 Vec3b &intensity = image.at<Vec3b>(j, i);