canny算子与图像卷积的程序
时间: 2023-12-25 08:21:32 浏览: 93
canny_canny算子图像边缘提取_图像提取_
以下是使用Canny算子实现图像边缘检测的Python代码示例:
```python
import cv2
# 读取图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 使用高斯滤波平滑图像
blur = cv2.GaussianBlur(gray, (5, 5), 0)
# 计算图像的梯度
grad_x = cv2.Sobel(blur, cv2.CV_64F, 1, 0, ksize=3)
grad_y = cv2.Sobel(blur, cv2.CV_64F, 0, 1, ksize=3)
grad = cv2.addWeighted(grad_x, 0.5, grad_y, 0.5, 0)
# 使用Canny算子进行边缘检测
edges = cv2.Canny(grad, 50, 150)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该程序首先读取一张图像,然后将其转换为灰度图像,并使用高斯滤波平滑图像。接着,程序计算图像的梯度,最后使用Canny算子进行边缘检测,并将结果显示在窗口中。
以下是使用卷积实现图像边缘检测的Python代码示例:
```python
import cv2
import numpy as np
# 读取图像
img = cv2.imread('image.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 定义Sobel算子
sobel_x = np.array([[-1, 0, 1], [-2, 0, 2], [-1, 0, 1]])
sobel_y = np.array([[-1, -2, -1], [0, 0, 0], [1, 2, 1]])
# 计算图像的梯度
grad_x = cv2.filter2D(gray, -1, sobel_x)
grad_y = cv2.filter2D(gray, -1, sobel_y)
grad = cv2.addWeighted(grad_x, 0.5, grad_y, 0.5, 0)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Edges', grad)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
该程序首先读取一张图像,然后将其转换为灰度图像。接着,程序定义了Sobel算子,并使用cv2.filter2D()函数对图像进行卷积操作,计算出图像的梯度。最后将结果显示在窗口中。
阅读全文