學習opencv(三 矩陣的掩膜運算)

2021-10-06 04:18:38 字數 3303 閱讀 7244

二維影象儲存在電腦中,可以理解為矩陣,乙個二維陣列,每個位置都會有乙個畫素值。訪問畫素值,就是訪問二維陣列中某個位置的值。

訪問的時候,我們先訪問行,後訪問列,通過如下方式,我們獲取行指標,索引i表示第幾行,從0開始計行數。

mat.ptr

(int i=0)

//獲取畫素矩陣的指標,索引i表示第幾行,從0開始計行數。

我們通過行指標,可以獲取到該行的的所有點,即所有畫素。

const uchar*  current= myimage.ptr

(row)

;//獲得當前行指標

p(row, col)

=current[col]

//獲取當前畫素點p(row, col)的畫素值。

獲取到畫素點,我們就可以對這個畫素點進行操作,如果我們加上迴圈巢狀,還可以遍歷所有的畫素點,即對所有的畫素點進行操作。

處理的原則如下:

如果我們輸入小於0的值,它會返回0,

如果我們輸入大於255的值,它會返回255,

如果我們輸入0-255之間的值,它會正常返回。

如:saturate_cast<288>,返回255.

saturate_cast,返回0.

saturate_cast<100>,返回100.

這個函式確保rgb的值在0-255之間。

下面是通過定義編寫的**來進行掩膜運算

#include

#include

#include

using

namespace cv;

intmain

(int argc,

char

** ar**)

namedwindow

("input image"

, cv_window_autosize)

;imshow

("input image"

, src)

;int cols =

(src.cols-1)

* src.

channels()

;int offsetx = src.

channels()

;int rows = src.rows;

dst = mat::

zeros

(src.

size()

, src.

type()

);for(

int row =

1; row <

(rows -1)

; row++)}

namedwindow

("contrast image demo"

, cv_window_autosize)

;imshow

("contrast image demo"

, dst)

;waitkey(0

);return0;

}

opencv3對於掩膜操作有api:filter2d

void

filter2d

( inputarray src,

outputarray dst,

int ddepth,

inputarray kernel,

point anchor =

point(-

1,-1

),double delta =0,

int bordertype = border_default

);

(1)inputarray型別的src ,輸入影象。

(2)outputarray型別的dst ,輸出影象,影象的大小、通道數和輸入影象相同。

(3)int型別的depth,目標影象的所需深度。

(4)inputarray型別的kernel,卷積核(或者更確切地說是相關核)是一種單通道浮點矩陣;如果要將不同的核應用於不同的通道,請使用split將影象分割成不同的顏色平面,並分別對其進行處理。。

(5)point型別的anchor,表示錨點(即被平滑的那個點),注意他有預設值point(-1,-1)。如果這個點座標是負值的話,就表示取核的中心為錨點,所以預設值point(-1,-1)表示這個錨點在核的中心。。

(6)double型別的delta,在將篩選的畫素儲存到dst中之前新增到這些畫素的可選值。說的有點專業了其實就是給所選的畫素值新增乙個值delta。

(7)int型別的bordertype,用於推斷影象外部畫素的某種邊界模式。有預設值border_default。

可有如下執行**

#include

#include

#include

using

namespace cv;

intmain

(int argc,

char

** ar**)

namedwindow

("input image"

, cv_window_autosize)

;imshow

("input image"

, src)

;double t =

gettickcount()

; mat kernel =

(mat_<

char

>(3

,3)<<0,

-1,0

,-1,

5,-1

,0,-

1,0)

;filter2d

(src, dst, src.

depth()

, kernel)

;double timeconsume =

(gettickcount()

- t)

/gettickfrequency()

;printf

("tim consume %.2f\n"

, timeconsume)

;namedwindow

("contrast image demo"

, cv_window_autosize)

;imshow

("contrast image demo"

, dst)

;waitkey(0

);return0;

}

opencv矩陣掩膜操作

include include using namespace std using namespace cv intmain imshow 操作前 src double t gettickcount 定義掩膜矩陣 卷積核 掩膜可以自己定義,不同矩陣效果不同 0 1 0 1 5 1 掩膜可以自己定義,...

OpenCV學習 掩膜

影象掩膜,用選定的影象 圖形或物體,對處理的影象 全部或區域性 進行遮擋,來控制影象處理的區域或處理過程。掩膜是一種影象濾鏡的模板,實用掩膜經常處理的是遙感影象。當提取道路或者河流,或者房屋時,通過乙個n n的矩陣來對影象進行畫素過濾,然後將我們需要的地物或者標誌突出顯示出來。這個矩陣就是一種掩膜。...

Opencv學習筆記 矩陣的掩膜操作

include include include using namespace cv int main int argc,char argv namedwindow input image cv window autosize imshow input image src int cols src....