Python OpenCV基础教程:图像读取、灰度转换与边缘检测实战

Leo
Leo
发布时间:2026-10-15 | 5人浏览过
原创

本文详解Python OpenCV基础图像处理流程。涵盖从导入cv2库、读取图片到灰度转换的核心代码。深入讲解GaussianBlur高斯模糊的参数设置(如7x7卷积核)及Canny边缘检测的双阈值机制。结合numpy构建卷积核,演示膨胀与腐蚀运算对边缘线条的细化与闭合效果,帮助开发者快速掌握OpenCV核心API应用。

准备工作

在已创建的项目中右键,选择Python File以新建Python文件。在代码起始处import cv2引入cv2库。

转成灰度图像

  • 通过调用imread()方法,从资源文件夹中加载名为lena.png的图片文件。
  • 利用cvtColor()函数实现图片色彩空间的转换。该函数第一个参数指定待处理的图像,第二个参数定义目标颜色空间。cv2.COLOR_BGR2GRAY表示将图像从BGR格式转换为GRAY(灰度)格式。需注意,虽然日常视觉习惯为RGB顺序,但OpenCV内部默认采用BGR通道顺序。
  • 调用imshow()函数展示处理后的图像,窗口标题设置为Gray Image。
  • 执行waitKey(0)指令以维持图像窗口显示。若省略此步骤,窗口将瞬间关闭而无法观察结果。
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow("Gray Image",imgGray)
cv2.waitKey(0)

查看上述代码的运行效果:

高斯模糊

  • GaussianBlur()函数用于对图像执行高斯模糊(亦称高斯平滑),这是一种常见的图像去噪技术。
  • 该函数的第一个参数为输入图像;第二个参数(7,7)指定卷积核的尺寸,该尺寸必须为奇数;第三个参数为Sigma X,若未指定则默认为0。
  • 使用imshow()分别显示原始图像与经过灰度处理后的图像。
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.waitKey(0)

观察运行结果,左侧为原始图像,右侧为应用高斯模糊后的效果:

边缘检测

Canny()函数用于执行边缘检测。其第一个参数为输入图像,第二个和第三个参数分别设定阈值1与阈值2,用于筛选并显示处于特定灰度值范围内的边缘线条。

img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
imgCanny=cv2.Canny(img,150,200)

cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.imshow("Canny Image",imgCanny)
cv2.waitKey(0)

运行代码查看处理结果:

膨胀运算

进行膨胀运算前需导入numpy库,具体操作为:import numpy as np。随后定义一个5x5大小的卷积核:kernel=np.ones((5,5),np.uint8),其中数值类型设定为无符号整型。

kernel=np.ones((5,5),np.uint8)
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
imgCanny=cv2.Canny(img,150,200)
imgDialation=cv2.dilate(imgCanny,kernel,iterations=1)

cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.imshow("Canny Image",imgCanny)
cv2.imshow("Dialation Image",imgDialation)
cv2.waitKey(0)

观察膨胀运算效果,该操作使边缘线条变粗,并将断开的边缘连接成整体。

腐蚀运算

对前述膨胀处理后的图像执行腐蚀运算,即可还原出闭合的边缘轮廓。

kernel=np.ones((5,5),np.uint8)
img=cv2.imread("Resources/lena.png")
imgGray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
imgBlur=cv2.GaussianBlur(imgGray,(7,7),0)
imgCanny=cv2.Canny(img,150,200)
imgDialation=cv2.dilate(imgCanny,kernel,iterations=1)

cv2.imshow("Gray Image",imgGray)
cv2.imshow("Blur Image",imgBlur)
cv2.imshow("Canny Image",imgCanny)
cv2.imshow("Dialation Image",imgDialation)
cv2.waitKey(0)

从左至右依次展示膨胀后的图像、腐蚀后的图像以及最终边缘检测图像。

本节内容相对基础,旨在帮助读者熟悉OpenCV的最基本应用。实践胜于空谈,建议动手编写并运行上述代码以加深理解~💘

至此,关于Python OpenCV基础功能的讲解告一段落。如需了解更多Python OpenCV相关内容,可查阅本站历史文章或继续浏览后续教程。感谢支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表