更好地检测C ++

时间:2018-04-09 16:27:25

标签: c++ algorithm opencv math image-processing

我的想法是使用openCV & C++ (objc++)实现简单的方形检测。我已经提取了图像的最大区域,如下图所示(彩色区域),但现在我想提取所有区域的角点(like TopLeft, TopRight, BottomLeft, BottomRight),然后检查4之间的距离每个角上的角相似,或者线之间的角度接近45°。

查看我正在谈论的图片:

Image1

Image2

但是 - 我已经到了这一点,我试图提取区域的角点,以便事后得到这样的东西:

Image 3

这是我第一次想到如何获得4个角点(见下面的步骤):

1.按

计算轮廓中心
for (int i=0; i<contourPoints.size(); i++) {
   avgx += contourPoints[i].x;
   avgy += contourPoints[i].y;
}
avgx/=contourPoints.size(); // centerx
avgy/=contourPoints.size(); // centery

2. 循环通过所有轮廓点以获得距离中心距离最远的点 - &gt;如果轮廓是正方形/矩形,则可能是角点

for (int i=0; i<contourPoints.size(); i++) {
   dx = abs(avgx - contourPoints[i].x);
   dy = abs(avgy - contourPoints[i].y);
   dist = sqrt( dx*dx + dy*dy );
   distvector.push_back(dist);
}
// sort distvector > distvector and get 4 corners with highest distance to the center -> hopefully the corners.

这个程序是我的想法,但我很确定必须有一种更好的方法来检测方块并使用给定的轮廓坐标提取它的角点。

所以任何帮助如何改进我的代码以获得更好的方式&amp;更高效的检测将非常感激。感谢提前一百万,Tempi。

0 个答案:

没有答案