18 图像梯度
图像梯度
图像边界
常用函数
cv2.Sobel()
cv2.Scharr()
cv2.Laplacian()
1 Sobel算子和Scharr算子
Sobel算是高斯平滑与微分操作的结合体
如果使用3*3滤波器,可以使用Scharr
2 Laplacian算子
示例代码如下:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2016/11/21 8:31
# @Author : Retacn
# @Site :
图像梯度
# sobel scharr
一阶求导或二阶求导
# laplacian
二阶求导
# @File : imageGradient.py
# @Software: PyCharm
import
cv2
import
numpy
as
np
from
matplotlib
import
pyplot as
plt
#读入图像
img=cv2.imread('../test.jpg',0)
#cv2.CV_64F输出图像的深度,可以使用-1,
laplacian=cv2.Laplacian(img,cv2.CV_64F)
#参数1,0
在x方向求一阶导数,最大可求二阶
sobelx=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
#参数0,1
在y方向求一阶导数,最大可求二阶
sobely=cv2.Sobel(img,cv2.CV_64F,0,1,ksize=5)
#深度不同造成的效果
sobelx8u=cv2.Sobel(img,cv2.CV_8U,1,0,ksize=5)
sobelx64f=cv2.Sobel(img,cv2.CV_64F,1,0,ksize=5)
abs_sobelx64f=np.absolute(sobelx64f)
sobel_8u=np.uint8(abs_sobelx64f)
plt.subplot(321),plt.imshow(img,cmap='gray'),plt.title('Original')
plt.xticks([]),plt.yticks([])
plt.subplot(322),plt.imshow(laplacian,cmap='gray'),plt.title('Laplacian')
plt.xticks([]),plt.yticks([])
plt.subplot(323),plt.imshow(sobelx,cmap='gray'),plt.title('Sobel
x')
plt.xticks([]),plt.yticks([])
plt.subplot(324),plt.imshow(sobely,cmap='gray'),plt.title('Sobel
y')
plt.xticks([]),plt.yticks([])
plt.subplot(325),plt.imshow(sobelx8u,cmap='gray'),plt.title('Sobel
CV_8U')
plt.xticks([]),plt.yticks([])
plt.subplot(326),plt.imshow(sobel_8u,cmap='gray'),plt.title('Sobel
abs(CV_64F)')
plt.xticks([]),plt.yticks([])
plt.show()