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