Python,Opencv cv2.Canny()边缘检测
生活随笔
收集整理的這篇文章主要介紹了
Python,Opencv cv2.Canny()边缘检测
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Python,Opencv的Canny邊緣檢測(cè)
- 1. 效果圖
- 2. 源碼
- 參考
這篇博客將介紹Canny邊緣檢測(cè)的概念,并利用cv2.Canny()實(shí)現(xiàn)邊緣檢測(cè);
- Canny邊緣檢測(cè)是一種流行的邊緣檢測(cè)算法。它是由約翰F開發(fā)的,是一個(gè)多階段的算法;
- Canny邊緣檢測(cè)大致包含4個(gè)步驟:
- 降噪(使用高斯濾波去除高頻噪聲);
- 計(jì)算邊緣梯度和方向(SobelX、SobleY核在水平方向和垂直方向?qū)ζ交蟮膱D像進(jìn)行濾波,找到每個(gè)像素的邊緣梯度和方向);
- 非最大抑制(在得到梯度大小和方向后,對(duì)圖像進(jìn)行全掃描,去除任何不需要的像素,這些像素可能不構(gòu)成邊緣。檢查像素是否在其梯度方向的鄰域中是局部最大值。否則,將被抑制(歸零)。簡而言之,得到的結(jié)果是一個(gè)具有“細(xì)邊”的二值圖像。
- 滯后閾值(決定哪些邊是真正的邊,哪些不是。為此需要兩個(gè)閾值minVal和maxVal,任何強(qiáng)度梯度大于maxVal的邊都肯定是邊,小于minVal的邊肯定是非邊,因此丟棄。位于這兩個(gè)閾值之間的邊根據(jù)其連通性被分類為邊或非邊。如果它們連接到“確定邊緣”像素,則它們被視為邊緣的一部分。否則,它們也會(huì)被丟棄。)
選擇滯后閾值minVal和maxVal是得到正確結(jié)果的關(guān)鍵。
1. 效果圖
原始圖 VS Canny檢測(cè)效果圖如下:
2. 源碼
# Canny邊緣檢測(cè)是一種流行的邊緣檢測(cè)算法。它是由約翰F開發(fā)的,是一個(gè)多階段的算法;
# Canny邊緣檢測(cè)大致包含4個(gè)步驟:
#
# 1.降噪(使用高斯濾波去除高頻噪聲);
# 2. 計(jì)算邊緣梯度和方向(SobelX、SobleY核在水平方向和垂直方向?qū)ζ交蟮膱D像進(jìn)行濾波,找到每個(gè)像素的邊緣梯度和方向);
# 3. 非最大抑制(在得到梯度大小和方向后,對(duì)圖像進(jìn)行全掃描,去除任何不需要的像素,這些像素可能不構(gòu)成邊緣。檢查像素是否在其梯度方向的鄰域中是局部最大值。否則,將被抑制(歸零)。簡而言之,得到的結(jié)果是一個(gè)具有“細(xì)邊”的二值圖像。
# 4. 滯后閾值(決定哪些邊是真正的邊,哪些不是。為此需要兩個(gè)閾值minVal和maxVal,任何強(qiáng)度梯度大于maxVal的邊都肯定是邊,小于minVal的邊肯定是非邊,因此丟棄。位于這兩個(gè)閾值之間的邊根據(jù)其連通性被分類為邊或非邊。如果它們連接到“確定邊緣”像素,則它們被視為邊緣的一部分。否則,它們也會(huì)被丟棄。)
#
# 選擇滯后閾值minVal和maxVal是得到正確結(jié)果的關(guān)鍵。
import cv2
from matplotlib import pyplot as pltimg = cv2.imread('zly.jpg', 0)
edges = cv2.Canny(img, 80, 200)plt.subplot(121), plt.imshow(img, cmap='gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122), plt.imshow(edges, cmap='gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])plt.show()
參考
- https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_canny/py_canny.html#canny
總結(jié)
以上是生活随笔為你收集整理的Python,Opencv cv2.Canny()边缘检测的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有啥好看的新电影吗
- 下一篇: Python,OpenCV轮廓属性、轮廓