OpenCV图像处理技术(Python)——图像梯度与Canny边缘检测
© Fu Xianjun. All Rights Reserved.
随着时间的推移,不知不觉的学了很多的东西,今天就让我们来学习OpenCV的图像梯度与Canny边缘检测。
1.能够理解图像梯度一阶导数和二阶导数的含义
2.能够使用sobel算子与laplacian算子函数进行边缘检测
3.能够掌握Canny边缘检测基本步骤
4.能够使用Canny函数进行边缘检测以及综合应用
import cv2
import numpy as np
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey()
cv2.destroyAllWindows()
img = cv2.imread('yuan.jpg',cv2.IMREAD_GRAYSCALE)
cv_show("yuan",img)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=3)
#因为右侧像素减去左边像素,存在负值的情况,因此使用cv2.convertScaleAbs取绝对值操作
sobelx = cv2.convertScaleAbs(sobelx)
cv_show("sobelx",sobelx)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=3)
#因为下侧像素减去下边像素,存在负值的情况,因此使用cv2.convertScaleAbs取绝对值操作
sobely = cv2.convertScaleAbs(sobely)
cv_show("sobely",sobely)
sobel_demo = cv2.addWeighted(sobelx,0.5,sobely,0.5,0.5)
cv_show("sobel_demo",sobel_demo)
Scharrx = cv2.Scharr(peppa,cv2.CV_64F,1,0)
Scharry = cv2.Scharr(peppa,cv2.CV_64F,0,1)
Scharrx = cv2.convertScaleAbs(Scharrx)
Scharry = cv2.convertScaleAbs(Scharrx)
Scharr_demo = cv2.addWeighted(Scharrx,0.5,Scharry,0.5,0.5)
cv2.imshow("Scharr_demo",Scharr_demo)
cv2.imshow("sobel_demo",sobel_demo)
cv2.waitKey()
cv2.destroyAllWindows()
laplacian = cv2.Laplacian(img,cv2.CV_64F)
laplacian = cv2.convertScaleAbs(laplacian)
cv2.imshow("laplacian_demo",laplacian)
cv2.waitKey()
cv2.destroyAllWindows()
学习内容:
使用高斯滤波器,以平滑图像,滤除噪声。
计算图像中每个像素点的梯度强度和方向。
应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应。
应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘。
通过抑制孤立的弱边缘最终完成边缘检测。
v1=cv2.Canny(peppa,80,150)
v2=cv2.Canny(peppa,50,100)
cv2.imshow("v1",v1)
cv2.imshow("v2",v2)
cv2.waitKey()
cv2.destroyAllWindows()
import cv2
def doCanny(x):
position = cv2.getTrackbarPos("CannyBar", "Canny")
canny = cv2.Canny(gauss, position, position*2.5)
cv2.imshow("Canny", canny)
img = cv2.imread("peppa.png",0)
gauss = cv2.GaussianBlur(img, (3, 3), 1)
cv2.namedWindow("Canny")
cv2.createTrackbar("CannyBar", "Canny", 1, 100, doCanny)
cv2.waitKey()
cv2.destroyAllWindows()
今天的图像梯度,计算的是图像变化的速度。对于图像的边缘,灰度变化较大,所以梯度值也较大。对于图像之中的平滑部分则反之。
Canny边缘检测则是一种使用多级边缘检测算法检测边缘的方法。
以上所学习的内容要感谢傅老师的教导。