我有一个对象,我想定义它的确切中心。使用OpenCV我使用Canny
检测边缘,然后执行HoughLinesP
以检测线:see this。
我使用Hough变换,因为对象不是完全矩形的,有时会检测到凸起here。
行在结构中定义。我还计算中点,角度和长度:
struct hLine {
Point pStart, pEnd, pMidpoint;
float angle;
int length;
};
如您所见,沿侧面检测到多条线。
我尝试的方法是计算线方程 y = kx + n ,然后按角度,长度和 n 对线进行排序,并仅保留线条,其中< strong> n 用一些数字分隔(矩形的两边)。我的垂直线有问题( n 无法计算),当对象几乎垂直时 n 数字很大,因此不会删除该行。
下一步是计算线交点,然后计算中心。 Idea基于本教程:opencv-code.com/tutorials/automatic-perspective-correction-for-quadrilateral-objects /
如果有人有更好的方法来检测准确的中心点,请说出来:)
答案 0 :(得分:1)
使用canny检测边缘后,您可以使用形态学关闭操作来连接边缘。然后使用多边形近似找到轮廓并平滑轮廓。对于您找到的每个四边形,您可以检查拐角是否大致为90度,以验证它是否为矩形。根据您的样本图像,您检测到的最大矩形应该是您感兴趣的矩形。(您还可以找到每个轮廓的凸包,然后将多边形近似应用于凸包)。
答案 1 :(得分:0)
我愿意:
答案 2 :(得分:0)
我会这样做:
步骤1和2已在您提供的链接中完成。
如果霍夫线检测不够健壮怎么办?
在这种情况下,我会使用A. Desolneux提出的一种非常强大的检测算法meaningful alignments。 它背后的数学起初看起来有点可怕,但算法仍然很容易实现(虽然可能有点慢)。 我过去曾经使用它,结果与作者声称的一样好。