写一个利用Sobel算子、Canny算法、Laplacian算子、Scharr 滤波器实现图像边缘检测对比的代码
时间: 2023-12-30 07:02:09 浏览: 28
以下是利用Sobel算子、Canny算法、Laplacian算子、Scharr 滤波器实现图像边缘检测对比的Python代码:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('lena.jpg', cv2.IMREAD_GRAYSCALE)
# Sobel算子
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobel = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)
# Canny算法
canny = cv2.Canny(img, 100, 200)
# Laplacian算子
laplacian = cv2.Laplacian(img, cv2.CV_64F)
# Scharr滤波器
scharrx = cv2.Scharr(img, cv2.CV_64F, 1, 0)
scharry = cv2.Scharr(img, cv2.CV_64F, 0, 1)
scharr = cv2.addWeighted(scharrx, 0.5, scharry, 0.5, 0)
# 显示图像
cv2.imshow('Original Image', img)
cv2.imshow('Sobel Operator', sobel)
cv2.imshow('Canny Edge Detection', canny)
cv2.imshow('Laplacian Operator', laplacian)
cv2.imshow('Scharr Filter', scharr)
# 等待按下任意按键退出程序
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码会读取一张名为lena.jpg的图像,分别使用Sobel算子、Canny算法、Laplacian算子、Scharr滤波器实现图像边缘检测,并将结果显示在窗口中。你可以根据自己的需要修改代码中的图像文件名和算法参数。