/*基於元素指標的畫素訪問:根據mat的資料結構,按理我們可以通過mat.data訪問畫素資料的指標,再根據指標訪問到畫素資料,這是最直接的方法,一般資料在記憶體中都是連續儲存(一般應該使用is_continues()進行判斷,注意上面程式中沒有,因為大部分情況是連續儲存的,所以沒有考慮),這種訪問畫素方式的一般格式是:* filename : get_pixels.cpp
* author : xiahouzuoxin @163.com
* version : v1.0
* date : sun 01 jun 2014 06:40:54 pm cst
* brief :
* */
#include
#include
using
namespace
std;
using
namespacecv;
intmain
(int
argc
,char
*argv
)mat
img;
img=
imread
(argv[1
],1);/*
* reverse pixels
*/mat
out1
=img
.clone
();// change dst will not affect img
long
n_rows
=out1
.rows
;long
n_cols
=out1
.cols
*out1
.channels
();/*
* row pointer
*/uchar*p
;for
(longi=
0;i<
n_rows;i
++)}/*
* element pointer
*/mat
out2
;out2
.create
(img
.size
(),img
.type
());
// reserve size and type but alloc new space
n_rows
=out2
.rows
;n_cols
=out2
.cols
*out2
.channels
();p
=out2
.data
;doublec=
0.5;
doubleb=
30;for(
longi=
0;i<
n_rows
*n_cols;i
++)/** display
*/namedwindow
("src_image"
,cv_window_normal
);imshow
("src_image"
,img
);namedwindow
("reverse_image"
,cv_window_normal
);imshow
("reverse_image"
,out1
);namedwindow
("mici_image"
,cv_window_normal
);imshow
("mici_image"
,out2
);waitkey(0
);return0;
}
uchar *p; // 定義乙個畫素索引指標
p = image.data; // image為mat物件,將物件的資料指標賦值給p
for (long i=0; i < image.rows*image.cols*image.channels(); i++)
上面程式通過元素指標的方法給出了乙個冪次變換的例子:
*(p+i) = (uchar)(255 * 0.5 * ((double)(img.data[i]) / 255) + b);
冪次變換是一種很好用的影象增強的方法,我的github上還有乙個matlab寫的用冪次變換處理外出爬山風景**的例子(
基於行指標的訪問:opencv中定義了乙個ptr方法,是乙個模板:
// returns pointer to the matrix element
// idx – rows,you should use @iscontinues() before decided it
templateuchar* ptr(const vec& idx);
通過ptr(i)直接獲得mat物件的第i行的指標,跟二維陣列的行指標有些類似,繼而可以通過ptr(i)[j]得到第i行第j列的畫素值。
上面程式給出了使用行指標進行影象反轉的例子。
請注意一下其它的函式:img.clone()之前已經講過——除了拷貝mat資料結構的頭和資料指標,連資料也一塊拷貝,並將資料指標指向新拷貝的資料。
左邊是元素,中間是經過反轉之後的,右邊是使用冪次變換增強後的。
OpenCV之畫素訪問優化
優化基本原則 1.減少多層迴圈的使用 2.盡量使用位運算 基於以上原則,可將之前幾篇博文中介紹的color reduce演算法 改為 voidcolorreduce5 mat image,intn 6 for int j 0 j 執行效率測試對比 測試環境 影象 500 338pixel cpu p...
OpenCV 畫素訪問
我說說我的理解 srcimage.at j,i 表示的是 j 行 i 列 的這個畫素 srcimage.at point j,i 表示的是 座標 j,i 的畫素12 為了 的圖方便說明 j 換成 x i 換成 y 也就是說 srcimage.at x,y 表示的是 x 行 y 列 的這個畫素 src...
OpenCV 操作畫素(訪問畫素值)
為構建計算機視覺應用程式,我們需要學會訪問影象的內容,有時也要修改或者建立影象。本章將講講如何操作影象的元素 即畫素 影象本質上就是由陣列組成的矩陣。opencv使用了cv mat結構來操作影象。矩陣中的每乙個元素表示乙個畫素。對灰度影象而言,畫素是8位無符號數 資料型別為unsigned char...