二維影象儲存在電腦中,可以理解為矩陣,乙個二維陣列,每個位置都會有乙個畫素值。訪問畫素值,就是訪問二維陣列中某個位置的值。
訪問的時候,我們先訪問行,後訪問列,通過如下方式,我們獲取行指標,索引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....