#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...