以下是一个详细的Python代码示例,使用OpenCV实现Canny边缘检测。代码可直接运行,请确保已安装OpenCV库(pip install opencv-python
)。
# 导入OpenCV库
import cv2
import numpy as np
# 读取输入图像(请确保当前目录下有一张名为'image.jpg'的图片)
# 或者替换为你的图片路径
image = cv2.imread('image.jpg')
# 检查图像是否正确加载
if image is None:
print("错误:无法读取图像,请检查文件路径")
exit()
# 步骤1:将图像转换为灰度图(Canny需要单通道输入)
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 步骤2:应用高斯模糊降噪(内核大小建议为奇数,常用5x5或7x7)
blurred = cv2.GaussianBlur(gray_image, (5, 5), 0)
# 步骤3:执行Canny边缘检测
# 参数说明:
# blurred: 输入图像
# 50: 低阈值
# 150: 高阈值(推荐比例为1:2或1:3)
edges = cv2.Canny(blurred, 50, 150)
# 显示结果
cv2.imshow('Original Image', image)
cv2.imshow('Canny Edges', edges)
# 保存结果到文件
cv2.imwrite('canny_edges_result.jpg', edges)
# 等待按键后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()
代码说明:
- 图像读取:使用
cv2.imread()
读取图像,如果路径错误会提示错误信息 - 灰度转换:Canny算法需要单通道输入,因此先将BGR图像转为灰度
- 高斯模糊:使用5x5高斯核消除噪声,这是Canny检测前的关键预处理步骤
- Canny检测:
• 低阈值(50):梯度值低于此的视为非边缘
• 高阈值(150):梯度值高于此的视为强边缘
• 中间值根据连续性判断(边缘跟踪) - 结果显示:同时显示原始图像和边缘检测结果
- 结果保存:将边缘检测结果保存为
canny_edges_result.jpg
运行准备:
- 将你的测试图像命名为
image.jpg
放在代码同级目录 - 或修改代码中的文件路径为你的实际路径
- 安装OpenCV:
pip install opencv-python
参数调整建议:
• 阈值比例推荐保持1:2或1:3
• 模糊内核越大,细节越少(降噪效果越强)
• 高阈值越高,检测到的边缘越少
运行后会看到两个窗口:左边是原始图像,右边是边缘检测结果。按任意键可退出程序。