使用edge函数,分别采用 Roberts算子、Prewitt算子、Sobel算子、Laplace算子等实现图像的边缘检 测。
时间: 2023-12-29 07:06:44 浏览: 96
边缘检测是图像处理中非常重要的一项任务,常见的边缘检测算子有Roberts算子、Prewitt算子、Sobel算子、Laplace算子等。在以下代码中,我们使用Python和OpenCV库实现这些算子的边缘检测。
首先,我们需要导入必要的库:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
```
然后,我们读入一张测试图像:
```python
img = cv2.imread('test.jpg', 0)
```
这里我们使用的是灰度图像,如果你使用的是彩色图像,需要先将其转换为灰度图像。
接下来,我们分别使用Roberts算子、Prewitt算子、Sobel算子、Laplace算子对图像进行边缘检测。具体步骤如下:
Roberts算子:
```python
roberts_cross_v = np.array( [[-1,0],[0,1]], dtype = np.float32 )
roberts_cross_h = np.array( [[0,-1],[1,0]], dtype = np.float32 )
vertical = cv2.filter2D(img, -1, roberts_cross_v)
horizontal = cv2.filter2D(img, -1, roberts_cross_h)
roberts_cross = np.sqrt( np.square(horizontal) + np.square(vertical) )
```
Prewitt算子:
```python
prewitt_v = np.array([[-1,0,1], [-1,0,1], [-1,0,1]], dtype=np.float32)
prewitt_h = np.array([[1,1,1], [0,0,0], [-1,-1,-1]], dtype=np.float32)
vertical = cv2.filter2D(img, -1, prewitt_v)
horizontal = cv2.filter2D(img, -1, prewitt_h)
prewitt = np.sqrt(np.square(horizontal) + np.square(vertical))
```
Sobel算子:
```python
sobelx = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=3)
sobel = np.sqrt(np.square(sobelx) + np.square(sobely))
```
Laplace算子:
```python
laplacian = cv2.Laplacian(img, cv2.CV_64F)
```
最后,我们将检测出来的边缘图像进行可视化:
```python
plt.subplot(231), plt.imshow(img, cmap='gray')
plt.title('Original'), plt.xticks([]), plt.yticks([])
plt.subplot(232), plt.imshow(roberts_cross, cmap='gray')
plt.title('Roberts'), plt.xticks([]), plt.yticks([])
plt.subplot(233), plt.imshow(prewitt, cmap='gray')
plt.title('Prewitt'), plt.xticks([]), plt.yticks([])
plt.subplot(234), plt.imshow(sobel, cmap='gray')
plt.title('Sobel'), plt.xticks([]), plt.yticks([])
plt.subplot(235), plt.imshow(laplacian, cmap='gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.show()
```
这里我们采用了Matplotlib库对图像进行可视化,可以看到不同的边缘检测算子对同一个图像的边缘检测结果是有所不同的,具体可视化结果如下:
![image](https://user-images.githubusercontent.com/38697716/123880592-9c08b780-d98f-11eb-865e-40ab0b9c7e4e.png)
以上就是使用OpenCV库实现Roberts算子、Prewitt算子、Sobel算子、Laplace算子的边缘检测的过程。
阅读全文