前提:各種算子不完全區分好壞,但根據我實際操作分析得到,有的算子之間效果大相徑庭,但有的也很相似,也就是各有各的用法,這里按
Sobel、Laplace、canny三種算子作比較,看其結果:
一、 Sobel、Laplace、canny邊緣提取()
- Sobel算子邊緣提取
注釋:gray 灰度轉換后的圖像,前面省略了一部灰度轉換的步驟,后面代碼會補上
1,表示x方向的差分階數,1或0------------------------------>如果只寫一個1,代表x方向提取---》1,0
1,表示y方向的差分階數,1或0------------------------------->如果只寫一個1,代表y方向提取---》0,1
sobel = cv2.Sobel(gray, cv2.CV_8U, 1, 1)#sobel算子邊緣檢測 PointInvert_sobel=255-sobel#反色
2.Laplace算子邊緣提取
注釋:這里要說的是通過對比sobel算子的結果,發現Laplace比sobel效果更好,可以說是加強版,效果如下所示
laplace = cv2.Laplacian(gray, cv2.CV_8U, ksize=3)#laplace算子邊緣檢測 PointInvert_laplace=255-laplace
3.Canny算子邊緣提取
注釋:上一節提到過:其效果多變,主要是看設置的閾值的范圍,
當我們改變閾值后,圖像后漸漸過濾掉一些背景,當然,重在閾值的選取上,當閾值選大的時候,也是會將圖像的特征完全損壞的。
canny=cv2.Canny(gray, 50, 150)#canny邊緣檢測 PointInvert_canny=255-canny#canny圖像反色 函數中閾值1和閾值2兩者的小者用於邊緣連接,而大者用來控制強邊緣的初始段,推薦的高低閾值比在2:1到3:1之間
二、四種圖像的代碼演示
三、源碼