读取一张彩色图像,分别用log算子、sobel算子、prewitt算子和roberts算子对图像进行边缘检测。并将原图和四幅边缘图像在同一个窗口带标题显示
时间: 2023-12-29 09:06:29 浏览: 44
以下是Python代码实现:
```python
import cv2
import numpy as np
# 读取彩色图像
img = cv2.imread('color_img.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 对灰度图像进行边缘检测
log = cv2.Laplacian(gray, cv2.CV_64F)
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=3)
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=3)
prewittx = cv2.filter2D(gray, -1, np.array([[-1, 0, 1], [-1, 0, 1], [-1, 0, 1]]))
prewitty = cv2.filter2D(gray, -1, np.array([[-1, -1, -1], [0, 0, 0], [1, 1, 1]]))
robertsx = cv2.filter2D(gray, -1, np.array([[1, 0], [0, -1]]))
robertsy = cv2.filter2D(gray, -1, np.array([[0, 1], [-1, 0]]))
# 将原图和边缘图像合并在一起显示
cv2.imshow('Edge Detection', np.hstack((img, log, sobelx, sobely, prewittx, prewitty, robertsx, robertsy)))
cv2.waitKey(0)
cv2.destroyAllWindows()
```
解释:
- 首先读取彩色图像并将其转换为灰度图像。
- 然后使用OpenCV中的Laplacian算子、Sobel算子、Prewitt算子和Roberts算子对灰度图像进行边缘检测。
- 最后使用`np.hstack()`函数将原图和四幅边缘图像水平合并在一起,并使用`cv2.imshow()`函数显示出来。
注意:在使用Sobel算子、Prewitt算子和Roberts算子时,需要设置参数`ksize`,表示算子的大小。这里我们选择了3x3的大小。