Sobel 算子边缘检测算法 Python 代码实现
本文提供一个经典的边缘检测算法——Sobel 算子的代码实现。
Sobel 算子是一种基于梯度的边缘检测算法,它通过对图像进行卷积操作,检测出图像中的边缘信息。具体来说,Sobel 算子分别对图像的水平和垂直方向进行卷积操作,得到两个梯度图像,然后将这两个梯度图像进行合并,得到最终的边缘图像。
以下是使用 Python 实现 Sobel 算子边缘检测的代码:
import cv2
import numpy as np
# 读取原始图像
img = cv2.imread('image.jpg', 0)
# 定义 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]])
# 对图像进行卷积操作
img_x = cv2.filter2D(img, -1, sobel_x)
img_y = cv2.filter2D(img, -1, sobel_y)
# 将两个梯度图像合并
img_edge = cv2.addWeighted(img_x, 0.5, img_y, 0.5, 0)
# 显示结果图像
cv2.imshow('original', img)
cv2.imshow('edge', img_edge)
cv2.waitKey(0)
在上述代码中,我们首先读取了一张灰度图像,并定义了 Sobel 算子。然后使用 OpenCV 中的 filter2D 函数对图像进行卷积操作,得到两个梯度图像。最后,使用 addWeighted 函数将两个梯度图像合并,并显示结果图像。
需要注意的是,在使用 filter2D 函数时,我们设置了第二个参数为 -1,表示输出图像与原始图像具有相同的深度。此外,addWeighted 函数中的两个权重参数可以根据具体情况进行调整,以得到更好的效果。
以上就是一个简单的 Sobel 算子边缘检测的代码实现。当然,除了 Sobel 算子,还有很多其他的边缘检测算法,比如 Canny 算子、Laplacian 算子等,读者可以根据自己的需求选择合适的算法。
原文地址: https://www.cveoy.top/t/topic/nhaq 著作权归作者所有。请勿转载和采集!