Lecture 3 opencv2系列之遍歷Mat

2021-06-27 11:58:11 字數 2081 閱讀 4885

閱讀本節內容,建議先閱讀lecture 2 opencv2系列之初識mat,了解影象畫素資料在mat中的儲存方式。

《the opencv tutorials》給出3種遍歷mat中影象畫素矩陣的方法,分別是指標遍歷(ptr)、迭代器(matiterator)、

at函式,前兩者亦分別稱作高效方法、安全方法。其中最為高效的是指標方法。

本文只介紹指標方法。

以下**實現對影象畫素資料的遍歷,我們列印影象的紅色分量。

#include

#include "opencv2/core/core.hpp"

#include "opencv2/highgui/highgui.hpp"

using

namespace

std;

using

namespace cv;

int main(int argc, const

char *argv)

mat src = imread(argv[1],imread_color);

int channels = src.channels();

int nrows = src.rows;

//影象資料列需要考慮通道數的影響;

int ncols = src.cols * channels;

if (src.iscontinuous())//連續儲存的資料,按一行處理

int i,j;

uchar* p;

for( i = 0; i < nrows; ++i)

cout

0;}

如果只是單純列印影象資料的話,可以直接用cout<

影象座標系和畫素矩陣。

影象左上角作為原點,按行和列展開。故影象左上角畫素對應矩陣的0行0列資料,這裡列不計通道。

opencv預設使用bgr的通道順序。

行資料的填補。

寬w高h的真彩色影象,畫素資料儲存需要wxhx3個uchar構成的記憶體塊,但是出於效率考慮,每行可能

會填補一些額外畫素,亦即儲存畫素資料的寬度不一定是w,往往填補為4或8的倍數,因為這樣一些多

**處理晶元可以更高效的處理影象。

影象的寬高分別由colsrows給出,行畫素個數由cols*channels()給出,實際行的位元組數由step[0]

給出。對於有額外填補的行資料,cols!= step[0]/elemsize(),反之,cols==step[0]/elemsize()

我們可以用成員函式iscontinuous()判斷影象是否對行進行了填補,對於沒有進行填補的影象,我們視其

畫素資料為乙個長為wxhxchannels()的一維陣列,加快迴圈速度。

行首位址。

mat的成員函式ptr(int j)返回第j行的首位址。

如果仔細閱讀過lecture 2 opencv2系列之初識mat,對於遍歷mat,自然想到用data+step+elemsize()

實現,這也是基於指標的方法。

核心迴圈**為:

int i,j;

uchar *p;

for (i = 0; i < nrows; i++)

}

本質上是因為src.ptr(i) == src.data + i * src.step[0]

在《opencv2 計算機視覺程式設計手冊》一書中,laganiere不建議用這種方法,原因是:容易出錯,並且不適用於帶「感興趣

區域」的影象。

the opencv reference manual release 2.4.9.0。

the opencv tutorials release 2.4.9.0。

加拿大, laganiere, r., & 張靜. opencv2 計算機視覺程式設計手冊.

Lecture 3 程式設計初步(一)

利用選擇結構,當某個條件成立時做乙個事情,不成立時做另乙個事情 關係運算和邏輯運算 關係運算用於表達條件,從而能夠給出判斷 例 amount 1000,temperature 35 邏輯運算將多個判斷組合起來,形成更複雜的條件 例 x 0 x是非負數 s 2000 s 3500 收入在2000 到3...

Lecture 2 矩陣消元

高斯消元的矩陣變換理解 現在有矩陣 a begin 1 2 1 3 8 1 0 4 1 end 需要將其變換為階梯形矩陣 u 首先,第二行減去第一行的三倍。begin 1 0 0 3 1 0 0 0 1 end begin 1 2 1 3 8 1 0 4 1 end begin 1 2 1 0 2 ...

演算法導論Lecture 2 解遞迴

這個lecture包括了clrs中的chapter3 chapter4兩章內容 漸近性標記和解遞迴。erik demaine主講。gee 每次看到erik的一頭 秀髮 跟leiserson教授的光頭就想笑笑,別誤會,erik s a man.解遞迴 解遞迴常用的有三種方法 替換法 substitut...