python canny边缘检测算法_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)函数来实现高斯滤波器降噪

高斯滤波-高斯降噪:

importcv2

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()

效果图:

可以看到,经过高斯平滑滤波降噪后的图像会比原图像模糊,因此通常高斯滤波我们也叫高斯模糊。这种模糊技术生成的图像,其视觉效果就像是经过一个半透明屏幕在观察图像,其结果就是减少图像的噪声并降低细节层次。

importcv2

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()

效果图:

你可能感兴趣的:(python,canny边缘检测算法)