网站推广,中国建设银行英语网站首页,wordpress包下载失败,韩式摄影网站源码文章目录 一、简介1. 意义2.具体步骤 二、代码实现三、总结 一、简介
1. 意义
在OpenCV中#xff0c;轮廓检测是图像处理中一个非常重要的环节#xff0c;它允许我们识别图像中的形状。这个过程通常涉及几个步骤#xff1a;读取图像、转换为灰度图、应用阈值处理#xff… 文章目录 一、简介1. 意义2.具体步骤 二、代码实现三、总结 一、简介
1. 意义
在OpenCV中轮廓检测是图像处理中一个非常重要的环节它允许我们识别图像中的形状。这个过程通常涉及几个步骤读取图像、转换为灰度图、应用阈值处理或边缘检测以获取二值图像、然后使用cv2.findContours()函数查找轮廓。
2.具体步骤
图像预处理首先对原始图像进行预处理以便更容易地检测轮廓。这通常包括转换为灰度图像、应用滤波器如高斯模糊以减少噪声以及二值化图像以简化后续处理。二值化将灰度图像转换为二值图像即图像中的每个像素都被设置为黑色或白色这取决于其灰度值是否超过某个阈值。二值化是轮廓检测中的关键步骤因为它简化了图像使得轮廓更加清晰。查找轮廓使用OpenCV的cv2.findContours()函数在二值图像中查找轮廓。这个函数会返回图像中所有轮廓的列表以及轮廓的层次结构。轮廓绘制为了可视化或进一步处理可以使用cv2.drawContours()函数在原始图像或另一个图像上绘制找到的轮廓。
二、代码实现
这段代码是对图片进行轮廓检测通过读取图片并转换为灰度图等一系列操作来对图片进行轮廓绘制以下是代码详情与解释。
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是一个轮廓近似方法它压缩水平、垂直和对角线段只保留它们的端点。