利用edge函数实现Sobel、Prewitt、Roberts、LOG、Canny不同的边缘检测算法,显示原始图像和边缘检测结果
时间: 2024-02-04 12:02:37 浏览: 93
好的,我可以帮您实现这个任务。由于我是一个纯文本AI助手,无法在这里直接展示图像,您需要在本地安装Python并使用相关库来运行代码并查看结果。
以下是基于Python的实现代码示例:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('test.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.sqrt(cv2.addWeighted(cv2.pow(sobelx, 2.0),
1.0, cv2.pow(sobely, 2.0), 1.0, 0.0))
# Prewitt算子
kernelx = np.array([[1,1,1],[0,0,0],[-1,-1,-1]],dtype=int)
kernely = np.array([[-1,0,1],[-1,0,1],[-1,0,1]],dtype=int)
prewittx = cv2.filter2D(img, -1, kernelx)
prewitty = cv2.filter2D(img, -1, kernely)
prewitt = cv2.sqrt(cv2.addWeighted(cv2.pow(prewittx, 2.0),
1.0, cv2.pow(prewitty, 2.0), 1.0, 0.0))
# Roberts算子
kernelx = np.array([[0,1],[-1,0]],dtype=int)
kernely = np.array([[-1,0],[0,1]],dtype=int)
robertsx = cv2.filter2D(img, -1, kernelx)
robertsy = cv2.filter2D(img, -1, kernely)
roberts = cv2.sqrt(cv2.addWeighted(cv2.pow(robertsx, 2.0),
1.0, cv2.pow(robertsy, 2.0), 1.0, 0.0))
# LOG算子
log = cv2.Laplacian(img,cv2.CV_64F)
# Canny算子
canny = cv2.Canny(img, 50, 150)
# 显示原始图像和边缘检测结果
cv2.imshow('Original Image', img)
cv2.imshow('Sobel', sobel)
cv2.imshow('Prewitt', prewitt)
cv2.imshow('Roberts', roberts)
cv2.imshow('LOG', log)
cv2.imshow('Canny', canny)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码将会读取名为"test.jpg"的图像文件,并分别使用Sobel、Prewitt、Roberts、LOG、Canny算子实现边缘检测,并将结果显示在窗口中供您查看。您只需要将图像文件替换为您想要处理的图像文件即可。
阅读全文