是否存在可在图像中检测已知尺寸和形状的目标物体的算法?
适合非专业背景的轻量实现方案(基于OpenCV,门槛极低,3张图调试成本几乎为0)
不需要用到深度学习之类的复杂方案,用传统图像处理算子几步就能搞定:
- 第一步:二值化分割白色区域
目标是白色矩形,灰度值显著高于背景,直接调用cv2.threshold()做固定阈值二值化,就能把所有高灰度的白色区域单独提取出来,深色的圆形和背景直接被过滤。 - 第二步:轮廓初筛
用cv2.findContours()提取所有白色区域的轮廓,结合你已知的矩形尺寸,先按面积过滤:根据图像分辨率算出目标矩形的面积上下阈值,把面积不在范围内的轮廓全部丢弃,大部分干扰轮廓这一步就能排除。 - 第三步:形状特征精准匹配
对剩余的轮廓做两个维度的校验,基本就能锁定目标:- 计算轮廓的最小外接矩形,对比外接矩形的长宽比和你已知的目标矩形比例,误差控制在5%以内即可保留
- 提前画一个和目标比例、圆角大小一致的标准模板轮廓,用
cv2.matchShapes()计算待检测轮廓和模板的形状相似度,得分低于0.1的就是目标圆角矩形
- 第四步:输出位置
确认目标轮廓后,调用cv2.boundingRect()就能直接得到矩形的左上角坐标、宽度、高度,即你需要的位置信息。
如果遇到少量噪点干扰,可以在二值化之后加一步开运算cv2.morphologyEx(src, cv2.MORPH_OPEN, kernel),提前去掉小的白色杂点,稳定性更高。
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

