opencv學習筆記(六)二值化以及邊緣檢測

2021-07-25 14:44:33 字數 2443 閱讀 1525

#include

iplimage* docanny(iplimage* in,double lowthresh,double highthresh,double aperture);

int main( int argc, char** argv )

{cvnamedwindow("example rgb", cv_window_autosize );

cvnamedwindow("example gray", cv_window_autosize );

cvnamedwindow("example canny", cv_window_autosize );

iplimage* img_rgb = cvloadimage("1.jpg");//載入原rgb圖   

iplimage* out;

cvshowimage("example rgb",img_rgb );//顯示原rgb圖 

out = cvcreateimage( cvsize( img_rgb->width,img_rgb->height ), img_rgb->depth, 1);

cvcvtcolor(img_rgb, out ,cv_bgr2gray);//把載入影象轉換為灰度圖   

cvshowimage("example gray", out );//顯示灰度圖

out = docanny( out, 10, 100, 3 );//進行canny邊緣檢測    

cvshowimage("example canny", out );//顯示canny邊緣檢測圖

cvwaitkey(0);

cvreleaseimage(&img_rgb);  

cvreleaseimage(&out);  

cvdestroywindow("example rgb");

cvdestroywindow("example gray");

cvdestroywindow("example canny");

在進行邊緣檢測前,首先要進行二值化。所以上面的**先進行了灰度處理。

通常灰度轉換的公式是:

方法1:

gray=(r+g+b)/3;

方法2:

gray=0.299r+0.587g+0.114b;

(這種引數考慮到了人眼的生理特點)

定義:void cvcvtcolor( const cvarr* src, cvarr* dst, int code );

src輸入的 8-bit,16-bit或

32-bit

單倍精度浮點數影像。

dst輸出的8-bit, 16-bit或

32-bit

單倍精度浮點數影像。

code

引數cv_bgr2gray是rgb到

gray,

引數cv_gray2bgr是gray到

rgb。

注意:這裡引數是_bgr,而rgb是格式

作用:該函式是opencv裡的顏色空間轉換函式,可以實現

rgb顏色向

hsv,hsi

等顏色空間的轉換,也可以轉換為灰度影象。

這是該函式演算法的詳細解釋

定義:void cvcanny( const cvarr* image,cvarr* edges,double threshold1,double threshold2, int aperture_size=3 );

引數說明

image輸入單通道影象

edges輸出的邊緣影象

,也是單通道的,但是是黑白的

threshold1第乙個閾值

threshold2第二個閾值

aperture_size sobel運算元核心大小,預設為

3即表示乙個

3*3的矩陣。

sobel 

運算元與高斯拉普拉斯運算元都是常用的邊緣運算元,詳細的數學原理可以查閱專業書籍。

函式 cvcanny 採用

canny

演算法發現輸入影象的邊緣而且在輸出影象中標識這些邊緣。

threshold1

和threshold2

當中的小閾值用來控制邊緣連線,大的閾值用來控制強邊緣的初始分割。

解釋一下:

邊緣的初始分割——應該就是把邊緣部分和其他部分分割開來。

邊緣連線——邊緣分割得到的,邊緣可能是斷斷續續的,邊緣連線就是使這些邊緣能夠連線起來。

當然最重要的是這個閾值怎麼取最合適——目前還不知道,先放著。

Opencv學習筆記(八)閾值化

閾值化函式就是指當影象某點的畫素值高於或者低於某乙個值 閾值 時統一取一值,其他時候保持不變或者變為0.通過這一方法我們可以從一張中得到我我們想要的部分,前提是該部分與背景灰度值有較大的差異。這一過程可以通過opnecv中的函式thresold 函式和adaptivethreshold 函式實現。t...

OpenCV二值化方法

cvthreshold是opencv庫中的乙個函式 作用 函式 cvthreshold 對單通道陣列應用固定閾值操作。該函式的典型應用是對灰度影象進行閾值操作得到二值影象。cvcmps 也可以達到此目的 或者是去掉雜訊,例如過濾很小或很大象素值的影象點。本函式支援的對影象取閾值的方法由 thresh...

OpenCV二值化方法

cvthreshold是opencv庫中的乙個函式 作用 函式 cvthreshold 對單通道陣列應用固定閾值操作。該函式的典型應用是對灰度影象進行閾值操作得到二值影象。cvcmps 也可以達到此目的 或者是去掉雜訊,例如過濾很小或很大象素值的影象點。本函式支援的對影象取閾值的方法由 thresh...