You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何检测图像中的自定义多条形图案并获取其位置?

检测自定义多条形图案(Multiple-Bar Pattern)的实用方案

我来分享一套针对这类固定数量、等宽异高平行黑条的检测方案,亲测适配不同尺寸的场景:

一、预处理:锁定黑色目标区域

首先把图像里的黑色区域单独提取出来,过滤无关干扰:

  • 先将图像转为灰度图,再用反向阈值分割(因为黑色对应低灰度值)生成二值掩码,自动阈值用Otsu方法就很省心。示例代码(基于OpenCV):
import cv2
import numpy as np

# 读取图像
img = cv2.imread("target_image.jpg")
# 转灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 提取黑色区域的二值掩码
_, black_mask = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)

二、筛选候选条带:匹配等宽平行特征

从掩码里找出符合要求的条带轮廓:

  • 用cv2.findContours提取所有黑色区域的轮廓,筛选出近似矩形的轮廓(条带是矩形形态)。
  • 对每个候选矩形,记录它的宽度、旋转角度、高度:
    • 宽度误差控制在±5%以内(可根据实际场景调整),确保所有条带宽度一致;
    • 旋转角度误差控制在±2度以内,保证条带平行;
    • 统计符合条件的矩形数量,看是否等于你预设的固定条带数。

三、验证图案完整性:确认是目标组合

找到足够数量的候选条带后,还需要验证它们是否构成完整的多条形图案:

  • 检查排列规律:条带应该紧密排列或按固定间距分布,且它们的顶边/底边大致在同一直线上(因为高度不同但平行);
  • 计算条带的中心坐标,验证它们的x/y坐标是否呈规律分布(水平条带的y坐标接近,垂直条带的x坐标接近)。

四、定位图案:获取整体边界

如果验证通过,把所有条带的外接矩形合并成一个大的 bounding box,就是图案的位置:

# 假设contours是筛选后的目标条带轮廓
x_coords = []
y_coords = []
widths = []
heights = []
for c in contours:
    x, y, w, h = cv2.boundingRect(c)
    x_coords.append(x)
    y_coords.append(y)
    widths.append(w)
    heights.append(h)

# 计算整体边界框
x_min = min(x_coords)
y_min = min(y_coords)
x_max = max([x + w for x, w in zip(x_coords, widths)])
y_max = max([y + h for y, h in zip(y_coords, heights)])
pattern_bbox = (x_min, y_min, x_max - x_min, y_max - y_min)

# 可视化检测结果
cv2.rectangle(img, (x_min, y_min), (x_max, y_max), (0, 255, 0), 2)
cv2.imshow("Detected Multiple-Bar Pattern", img)
cv2.waitKey(0)

五、特殊场景适配

  • 图像有噪声:预处理前加cv2.GaussianBlur模糊,过滤小噪点;
  • 条带边缘不规整:用形态学操作(膨胀+腐蚀)修复轮廓;
  • 倾斜条带:轮廓检测会保留旋转角度,只要角度一致就能正常匹配。

内容的提问来源于stack exchange,提问作者user9590073

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:44:43