OpenCV-轮廓检测

文章目录

一、简介

1. 意义

在OpenCV中,轮廓检测是图像处理中一个非常重要的环节,它允许我们识别图像中的形状。这个过程通常涉及几个步骤:读取图像、转换为灰度图、应用阈值处理(或边缘检测)以获取二值图像、然后使用cv2.findContours()函数查找轮廓。

2.具体步骤

  • 图像预处理:首先,对原始图像进行预处理,以便更容易地检测轮廓。这通常包括转换为灰度图像、应用滤波器(如高斯模糊)以减少噪声,以及二值化图像以简化后续处理。
  • 二值化:将灰度图像转换为二值图像,即图像中的每个像素都被设置为黑色或白色,这取决于其灰度值是否超过某个阈值。二值化是轮廓检测中的关键步骤,因为它简化了图像,使得轮廓更加清晰。
  • 查找轮廓:使用OpenCV的cv2.findContours()函数在二值图像中查找轮廓。这个函数会返回图像中所有轮廓的列表以及轮廓的层次结构。
  • 轮廓绘制:为了可视化或进一步处理,可以使用cv2.drawContours()函数在原始图像或另一个图像上绘制找到的轮廓。

二、代码实现

这段代码是对图片进行轮廓检测,通过读取图片,并转换为灰度图等一系列操作来对图片进行轮廓绘制,以下是代码详情与解释。

python 复制代码
import cv2  
  
# 读取图像  
phone = cv2.imread('sj.png')  
# 转换为灰度图  
phone_gray = cv2.cvtColor(phone, cv2.COLOR_BGR2GRAY)  
# 显示灰度图  
cv2.imshow('phone_gray', phone_gray)  
cv2.waitKey(0)  
  
# 应用阈值处理以进行二值化  
ret, phone_binary = cv2.threshold(phone_gray, 120, 255, cv2.THRESH_BINARY)  
# 显示二值化图像  
cv2.imshow('phone_binary', phone_binary)  
cv2.waitKey(0)  
  
# 寻找轮廓  
contours, hierarchy = cv2.findContours(phone_binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)  
# 打印层次结构和轮廓数量  
print(hierarchy)  
print(len(contours))  
  
# 轮廓绘制  
# 在原始图像上绘制轮廓  
image_copy = phone.copy()  
cv2.drawContours(image_copy, contours, -1, (0, 255, 0), 3)  
# 显示带有轮廓的图像  
cv2.imshow('Contours_show', image_copy)  
cv2.waitKey(0)  
  
# 销毁所有窗口  
cv2.destroyAllWindows()
  • 读取图像:使用cv2.imread()函数读取名为sj.png的图像文件。
  • 转换为灰度图:通过cv2.cvtColor()函数将图像从BGR颜色空间转换为灰度图像,因为轮廓检测通常在灰度图像上进行。
  • 显示灰度图:使用cv2.imshow()函数显示灰度图像。
  • 二值化:应用阈值处理将灰度图像转换为二值图像,其中所有像素值大于或等于120的都被设置为255(白色),其余都被设置为0(黑色)。
  • 显示二值化图像:使用cv2.imshow()函数显示二值化后的图像。
  • 寻找轮廓:使用cv2.findContours()函数在二值化图像中查找轮廓。该函数返回两个值:轮廓列表和轮廓的层次结构。
  • 打印层次结构和轮廓数量:输出轮廓的层次结构和找到的轮廓数量。
  • 轮廓绘制:在原始图像(或其副本)上绘制找到的轮廓。这里使用绿色((0, 255, 0))和线宽为3来绘制。
  • 显示带有轮廓的图像:使用cv2.imshow()函数显示绘制了轮廓的图像。
  • 销毁所有窗口:在程序结束时销毁所有OpenCV创建的窗口。

三、总结

在读取图像文件名,我们可以根据具体需求调整阈值处理和其他参数。此外,cv2.RETR_TREE是一个轮廓检索模式,它检索所有轮廓并创建完整的层次结构。根据我们的需求,可以选择其他检索模式,如cv2.RETR_EXTERNAL只检索最外层的轮廓。cv2.CHAIN_APPROX_SIMPLE是一个轮廓近似方法,它压缩水平、垂直和对角线段,只保留它们的端点。

相关推荐
shiming88791 小时前
MATLAB图像处理
图像处理·计算机视觉·matlab
点PY4 小时前
基于Sparse Optical Flow 的Homography estimation
人工智能·opencv·计算机视觉
越甲八千4 小时前
opencv滤波算法总结
opencv
越甲八千4 小时前
opencv对比度增强方法算法汇总
人工智能·opencv·算法
独木三绝4 小时前
OpenCV第八章——腐蚀与膨胀
人工智能·opencv·计算机视觉
柠檬少少开发5 小时前
图像拼接算法及实现(一)
人工智能·算法·计算机视觉
红米煮粥6 小时前
OpenCV-直方图
人工智能·opencv·计算机视觉
隔窗听雨眠6 小时前
计算机视觉学习路线
计算机视觉
美狐美颜sdk6 小时前
探索视频美颜SDK与直播美颜工具的开发实践方案
人工智能·计算机视觉·音视频·直播美颜sdk·视频美颜sdk
极术社区7 小时前
ResNeXt学习
开发语言·学习·计算机视觉·php