使用cv2.Sobel()cv2.Scharr()cv2.Laplacian()寻找图像的梯度边缘
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用cv2.Sobel()cv2.Scharr()cv2.Laplacian()寻找图像的梯度边缘相关的知识,希望对你有一定的参考价值。
这篇博客将介绍如何使用cv2.Sobel()、cv2.Scharr()、cv2.Laplacian()寻找图像的梯度、边缘;
- OpenCV提供了三种类型的梯度滤波器或高通滤波器,Sobel、Scharr和Laplacian。
- Sobel算子是一种联合高斯平滑加微分运算,它对噪声的抵抗能力更强。
- Schaar的效果要比Sobel好一些
1. 效果图
原始图 VS 拉普拉斯 VS SobelX VS SobleY VS SchaarX VS SchaarY效果图如下:
2. 源码
# 使用cv2.Sobel()、cv2.Scharr()、cv2.Laplacian()寻找图像的梯度、边缘;
# OpenCV提供了三种类型的梯度滤波器或高通滤波器,Sobel、Scharr和Laplacian。
# Sobel算子是一种联合高斯平滑加微分运算,因此它对噪声的抵抗能力更强。
# Schaar的效果要比Sobel好一些
import cv2
from matplotlib import pyplot as plt
img = cv2.imread('gw.jpg', 0)
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)
schaarx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=-1)
schaary = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=-1)
plt.subplot(3, 2, 1), plt.imshow(img, cmap='gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(3, 2, 2), plt.imshow(laplacian, cmap='gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(3, 2, 3), plt.imshow(sobelx, cmap='gray')
plt.title('Sobel X'), plt.xticks([]), plt.yticks([])
plt.subplot(3, 2, 4), plt.imshow(sobely, cmap='gray')
plt.title('Sobel Y'), plt.xticks([]), plt.yticks([])
plt.subplot(3, 2, 5), plt.imshow(schaarx, cmap='gray')
plt.title('Schaar Y'), plt.xticks([]), plt.yticks([])
plt.subplot(3, 2, 6), plt.imshow(schaary, cmap='gray')
plt.title('Schaar Y'), plt.xticks([]), plt.yticks([])
plt.show()
参考
以上是关于使用cv2.Sobel()cv2.Scharr()cv2.Laplacian()寻找图像的梯度边缘的主要内容,如果未能解决你的问题,请参考以下文章