OpenCV2 矩陣的掩膜操作

2021-10-03 22:48:20 字數 2899 閱讀 4069

二、矩陣的掩膜操作(提高影象的對比度)

1、獲取影象畫素指標

mat.ptr(int i = 0)//ptr為指標,uchar為指標型別獲取畫素矩陣的指標,索引i代表第幾行,從0開始計算行數。

const uchar* current = mat.ptr(row);獲取當前行指標

p(row, col) = current[col]獲取當前畫素點p(row,col)的畫素值

2、畫素範圍處理saturate_cast < uchar >

這個函式的功能是確保rgb值在範圍0-255之間。

saturate_cast(-100)返回0

saturate_cast(288)返回255

saturate_cast(100)返回100

3、掩膜操作

通過掩膜操作,可以提高影象的對比度。根據掩膜可以重新計算每個畫素的畫素值。需提供乙個卷積模板,遍歷影象各個畫素值,讓每乙個畫素值與模板卷積賦值為新的畫素值。例如下面即為一種型別的卷積模板:

i(i , j) = 5 * i(i , j) - [i(i - 1 , j) + i(i + 1 , j) + i(i , j - 1) + i(i , j + 1)]

[ 0−

10−1

5−10

−10]

\begin 0&-1&0\\ -1&5&-1\\ 0&-1&0 \end

⎣⎡​0−1

0​−1

5−1​

0−10

​⎦⎤​

4、函式呼叫filter功能

mat kernel = (mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);定義掩膜

filter2d(src, dst, src.depth(),kernel);其中src與dst是mat型別變數,src.depth表示位圖深度(也可以用-1代替)。

5、初始化一幅影象

dst = mat::zeros(src.size(), src.type());

初始化dst,初始化dst的大小、型別均和src影象一致,初始化為0,即一張全黑圖(都是0,都是255就是白色,只有某一單通道,就是單色)

6、獲取程式執行時間

double t =

gettickcount()

;//在測試程式前記錄一下當前執行時間

double timeconsume =

(gettickcount()

- t)

/gettickfrequency()

;//測試程式後,計算時間差值即為測試程式執行時間

printf

("time consume %.2f"

, timeconsume)

;

示例**(掩膜操作,提高影象對比度):

#include

#include

using

namespace cv;

using

namespace std;

intmain

(int argc,

char

** ar**)

imshow

("input"

, src)

;/*int cols = (src.cols - 1) * src.channels();//多通道的影象中,每列並列存放通道數量的子列,如rgb三通道彩色圖

int offsetx = src.channels();//獲取影象的通道數

int rows = src.rows;//獲取行方向畫素值

dst = mat::zeros(src.size(),src.type());//初始化dst,初始化dst的大小、型別均和src影象一致,初始化為0,即一張全黑圖(都是0,都是255就是白色,只有某一單通道,就是單色)

for (int row = 1; row < (rows - 1); row++)

}掩膜基本操作方法,下面直接呼叫函式實現*/

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

("time consume %.2f"

, timeconsume)

;imshow

("contrast image demo"

, dst)

;waitkey(0

);destroyallwindow()

;return0;

}

輸出執行結果如下所示:

原始影象

掩膜操作處理後的影象

opencv矩陣掩膜操作

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

opencv 掩膜操作

saturate cast函式保證運算後全部歸一化在0 255之間,注意上面row,col的移動範圍是很有講究的,的四個邊緣行因為沒有完整的上下左右所以省略,然而在實際應用掩膜操作時候並不用到自己這麼複雜的寫 opencv中提供了乙個filter2d函式。mat kernel mat 3,3 0,1...

OpenCV02 矩陣的掩膜操作

獲得當前行指標const uchar current myimage.ptr row 獲取當前畫素點p row,col 的畫素值p row,col current col 畫素範圍處理saturate cast 在0 255返回正常值,小於0返回0,大於255返回255 掩膜 mask 操作 獲取影...