OpenCV - 识别视频帧上的常规模式

时间:2014-09-04 02:27:43

标签: c++ opencv image-processing pattern-recognition hough-transform

我需要识别视频序列上的条纹图案。

我尝试使用OpenCV Houghlines函数来检测模式的行。一旦我有了Houghlines(GREEN_lines),我需要知道哪些是彼此最接近的线并丢弃所有其他线。我还需要知道图像上有多对暗(RED_line)和浅(BLUE_line)条纹。

然后我需要知道每个"框内的区域的平均亮度"由Houghlines组成。

Scheme of detection

图案可以出现在不同角度的视频帧中(右图)。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

假设对于检测到的k行,从应用霍夫变换获得的线是L1,L2,...,Lk。设每条线Li由2个点表示((x1i,y1i),(x2i,y2i))。

首先,确定哪些线是平行的,哪些线是彼此垂直的。您可以通过计算每对线的单位方向向量之间的点积来实现此目的。彼此垂直的成对线将具有点积0(或由于噪声/数值误差而检测到的线可能不完全垂直,因此接近0),如果它们是平行的,则点积接近于1。

一旦你知道哪些线是平行的,哪些是垂直的,你可以根据x坐标(对于"垂直"线)或y坐标(对于2&#34)对它们进行排序。 ;水平"线)。

现在你需要解决每个"垂直"之间的交叉点。线和每个"水平"线,可以使用一点代数和几何来获得。

使用这些点和线条,您可以创建一个遮罩来计算图像中的所需值(例如,每个框内的亮度)。排序的行也会告诉您哪些行彼此最接近。