码迷,mamicode.com
首页 > 其他好文 > 详细

OpenCV常用基本处理函数(6)图像梯度

时间:2019-06-08 11:35:57      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:math   边缘检测   har   ecc   之间   灰度   opencv   不同的   ros   

形态学转换

腐蚀

img = cv2.imread(j.png,0)
kernel = np.ones((5,5),np.uint8)
erosion = cv2.erode(img,kernel,iterations = 1)

膨胀

dilation = cv2.dilate(img,kernel,iterations = 1)

先进性腐蚀再进行膨胀就叫做开运算。就像我们上面介绍的那样,它被用来去除噪声。这里我们用到的函数是 cv2.morphologyEx()。

opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel)
技术图片

 

图像梯度

梯度简单来说就是求导,对于像素点的分布曲线求导,然后在像素变化较大的地方即为边缘,通过求导可以求出边缘的位置。

OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和 Laplacian

Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对 Sobel(使用小的卷积核求解求解梯度角度时)的优化。Laplacian 是求二阶导数。

laplacian = cv2.Laplacian(img,cv2.CV_64F)
sobelx = cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)

效果如图:

技术图片

Candy边缘检测

1.去除噪声,高斯核

2.计算梯度

3.进行运算

4.非极大值抑制

5.设置两个阈值(图像的灰度梯度高于 maxVal 时被认为是真的边界,那些低于 minVal 的边界会被抛弃。如果介于两者之间的话,就要看这个点是否与某个被确定为真正的边界点相连,如果是就认为它也是边界点,如果不是就抛弃)

在OpenCV中通过cv2.Canny()来进行,这个函数的第一个参数是输入图像。第二和第三个分别是 minVal 和 maxVal。第三个参数设置用来计算图像梯度的 Sobel卷积核的大小,默认值为 3。最后一个参数是 L2gradient,它可以用来设定求梯度大小的方程。如果设为 True,就会使用我们上面提到过的方程,否则使用方程:技术图片. 代替,默认值为 False。

例如:

edges = cv2.Canny(img,100,200)

 

OpenCV常用基本处理函数(6)图像梯度

标签:math   边缘检测   har   ecc   之间   灰度   opencv   不同的   ros   

原文地址:https://www.cnblogs.com/ywheunji/p/10990150.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!