网站导航固定,网站开发工程师需要什么证书,网站背景大小,电子商务网站建设中图像轮廓检测初学
在图像处理领域中#xff0c;轮廓检测是一项重要的任务#xff0c;用于寻找并标定图像中的物体边缘。本文将介绍如何使用OpenCV库进行图像轮廓检测#xff0c;并展示一个简单的示例代码。代码中的注释将详细解释每一步的操作。
1. 引言
图像轮廓检测是图…图像轮廓检测初学
在图像处理领域中轮廓检测是一项重要的任务用于寻找并标定图像中的物体边缘。本文将介绍如何使用OpenCV库进行图像轮廓检测并展示一个简单的示例代码。代码中的注释将详细解释每一步的操作。
1. 引言
图像轮廓检测是图像处理中的一项关键技术可用于检测物体的形状、边界等信息。在本文中我们将演示如何使用OpenCV进行图像轮廓检测并通过示例代码展示这一过程。
2. 代码示例
以下是一个使用OpenCV的示例代码演示了图像轮廓检测的过程
import cv2
import numpy as np# 读取图像
src_img cv2.imread(demo.png) # 例如简单的5个英文验证码图片# 将图像转换为灰度
img cv2.cvtColor(src_img, cv2.COLOR_BGR2GRAY)# 阈值化处理生成二值图像
thresh, img cv2.threshold(img, 190, 255, cv2.THRESH_BINARY) # 白底黑字
print(阈值1:, thresh)thresh, img cv2.threshold(img, 190, 255, cv2.THRESH_BINARY_INV) # 黑底白字
print(阈值2:, thresh)thresh, img cv2.threshold(img, 1, 255, cv2.THRESH_OTSU) # 自动寻找阈值
print(自动阈值:, thresh)# 膨胀操作填充小的空洞去掉周围的点点
kernel np.ones([5, 5])
img cv2.dilate(img, kernel)# 腐蚀操作消除噪声把有用的英文扩大
kernel np.ones([7, 7])
img cv2.erode(img, kernel)# 寻找图像轮廓
contours, _ cv2.findContours(img, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)# 计算轮廓面积
areas []
for c in contours:area cv2.contourArea(c)areas.append(area)
areas np.array(areas)
print(轮廓面积:, areas)# 获取面积最大的5个轮廓
index np.argsort(areas)[-6:-1] # 不是[-5:]因为最大的面积是边框
print(前5个轮廓的索引:, index)# 提取前5个轮廓
top5_contours []
for i in range(5):top5_contours.append(contours[index[i]])# 在原图上绘制矩形框
for c in top5_contours:# 获取矩形框坐标x, y, w, h cv2.boundingRect(c)# 绘制矩形框cv2.rectangle(src_img, [x, y, x w, y h], [0, 0, 255], 2)# 显示结果图像
cv2.imshow(demo, src_img)
cv2.waitKey(0)原图 识别并画框
3. 代码解释
3.1 图像预处理
首先读取图像并将其转换为灰度图像。接着通过阈值化处理得到二值图像其中包括白底黑字和黑底白字两种处理方式。
3.2 形态学操作
通过膨胀dilate和腐蚀erode操作对图像进行形态学处理以填充小的空洞并消除噪声。
3.3 轮廓检测
使用OpenCV的findContours函数寻找图像中的轮廓并计算每个轮廓的面积。
3.4 提取前5个轮廓
通过面积排序提取前5个面积最大的轮廓。
3.5 绘制矩形框
在原图上绘制包围每个轮廓的矩形框以突显检测到的物体。
4. 结论
通过上述代码示例我们演示了如何使用OpenCV进行图像轮廓检测并通过一系列预处理操作找到并突显图像中的主要物体。轮廓检测在计算机视觉和图像处理中有着广泛的应用可用于目标检测、图像分割等任务。详细的注释帮助理解代码的每一步操作为初学者提供了一个学习的起点。 代码参考源自Shady的混乱空间