python-opencv-Canny邊緣檢測


OpenCV中有專門的Canny邊緣檢測算法的函數Canny(image,threshold1,threshold2,edges=None,apertureSize=None,L2gradient=None),我們可以直接調用它輕松實現圖像的邊緣檢測。 

但是Canny()函數內部並沒有對圖像進行很好地降噪,因此為了保證結果更准確,我們在調用Canny()函數前常常會先通過高斯濾波降噪。OpenCV中提供了
GaussianBlur(src,ksize,sigmax,dst=None,sigmaY=None,borderType=None)函數來實現高斯濾波器降噪

高斯濾波-高斯降噪:

import cv2

image = cv2.imread("1.png",1)
image_info =image.shape
height=image_info[0]
width=image_info[1]
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)

image_G=cv2.GaussianBlur(gray,(5,5),0)  #高斯濾波-高斯降噪
'''
參數1 src:必選參數。待處理的圖像。它可以是單獨的任意通道數的圖像,但圖片深度必須為CV_8U,CV_16U,CV_16S,CV_32F以及CV_64F之一
參數2 ksize:必選參數。高斯內核的大小。其中ksize.width和ksize.height可以不同,但他們都必須為正數和奇數或者它們都為零。【用來計算的像素點】
參數3 sigmaX:必選參數。表示高斯內核函數在X方向的的標准偏差。
參數4 可選參數。sigmaY: 高斯核函數在Y方向上的標准偏差,如果sigmaY是0,則函數會自動將sigmaY的值設置為與sigmaX相同的值,如果sigmaX和sigmaY都是0,這兩個值將由ksize.width和ksize.height計算而來
'''
cv2.imshow("dst",image_G)

cv2.waitKey()

效果圖:

 

 

可以看到,經過高斯平滑濾波降噪后的圖像會比原圖像模糊,因此通常高斯濾波我們也叫高斯模糊。這種模糊技術生成的圖像,其視覺效果就像是經過一個半透明屏幕在觀察圖像,其結果就是減少圖像的噪聲並降低細節層次。

 

 

import cv2

image = cv2.imread("wuhuan.jpg",1)
image_info =image.shape
height=image_info[0]
width=image_info[1]
gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
cv2.imshow('gray',gray)

image_G=cv2.GaussianBlur(gray,(5,5),0)  

dst=cv2.Canny(image_G,50,50)  #邊緣檢測
'''
參數1 image:必選參數。表示原圖像數組,即8位輸入圖像
參數2 threshold1:必選參數。用於設置最小閾值
參數3 threshold2:必選參數。用於設置最大閾值--用於進一步刪選邊緣信息
最后決定哪些是邊緣,哪些是真正的邊,哪些不是邊。Canny邊緣檢測會設置兩個
值,我們稱為高閾值(MaxVal)和低閾值(MinVal)。當像素點的幅值超過高閾值時,該像素點被保留為邊緣像素;當像素點的幅值小於低閩值時,該像素點被排除;當像素點位於低閾值和高閾值之間時,只有當像素點連接一個超過高閾值的像素時才被保留。
'''
cv2.imshow(
"dst",dst) cv2.waitKey()

效果圖:

 

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM