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

Posted ywheunji

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCV常用基本处理函数图像梯度相关的知识,希望对你有一定的参考价值。

形态学转换

腐蚀

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常用基本处理函数图像梯度的主要内容,如果未能解决你的问题,请参考以下文章

opencv1

opencv1

OpenCV-形态学梯度(GRADIENT)

OpenCV常用基本处理函数图像基本操作

OpenCV常用基本处理函数图像模糊

OpenCV常用基本处理函数图像金字塔和直方图