opencv_python学习笔记十五

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

posted @ 2016-11-21 16:33  retacn_yue  阅读(216)  评论(0编辑  收藏  举报