二、矩陣的掩膜操作(提高影象的對比度)
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 操作 獲取影...