使用cv2.Sobel()、cv2.Scharr()、cv2.Laplacian()寻找图像的梯度、边缘
生活随笔
收集整理的這篇文章主要介紹了
使用cv2.Sobel()、cv2.Scharr()、cv2.Laplacian()寻找图像的梯度、边缘
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Python,OpenCV尋找圖像的梯度、邊緣
- 1. 效果圖
- 2. 源碼
- 參考
這篇博客將介紹如何使用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 pltimg = 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()
參考
- https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_gradients/py_gradients.html#gradients
總結
以上是生活随笔為你收集整理的使用cv2.Sobel()、cv2.Scharr()、cv2.Laplacian()寻找图像的梯度、边缘的全部內容,希望文章能夠幫你解決所遇到的問題。