【问题标题】:OpenCV - Identify regular patterns on video frameOpenCV - 识别视频帧上的规则模式
【发布时间】:2014-09-04 10:54:09
【问题描述】:
我需要识别视频序列上的条纹图案。
我正在尝试使用 OpenCV Houghlines 函数来检测图案的线条。一旦我有了Houghlines(GREEN_lines),我需要知道哪些是彼此最近的行并丢弃所有其他行。我还需要知道图像上有多少对深色(RED_line)和浅色(BLUE_line)条纹。
然后我需要知道由 Houghlines 形成的每个“盒子”内区域的平均亮度。
图案可以在不同角度的视频帧中出现(右图)。
有什么建议吗?
【问题讨论】:
标签:
c++
opencv
image-processing
pattern-recognition
hough-transform
【解决方案1】:
假设通过应用霍夫变换获得的线是L1,L2,...,Lk,对于检测到的k条线。让每条线 Li 用 2 个点表示,((x1i, y1i), (x2i, y2i))。
首先,确定哪些线是平行的,哪些是相互垂直的。您可以通过计算每对线的单位方向向量之间的点积来做到这一点。相互垂直的线对将具有点积 0(或接近 0,因为您检测到的线可能由于噪声/数值误差而不完全垂直),如果它们平行,则点积接近 1。
一旦您知道哪些线是平行的,哪些线是垂直的,您就可以根据 x 坐标(对于“垂直”线)或 y 坐标(对于 2 条“水平”线)对它们进行排序。
现在您需要求解每条“垂直”线和每条“水平”线之间的交点,这可以使用一点代数和几何来获得。
使用这些点和线,您可以创建一个遮罩来计算图像中的所需值(例如,每个框内的亮度)。排序后的行还会告诉您哪些行彼此最接近。