4

我已经编写了算法来提取图像中显示的点。它们形成凸形,我知道它们的顺序。如何从这些点中提取角(前 3 和底部 3)?我正在使用opencv。

盒子

4

2 回答 2

5

如果您已经有了对象的凸包,并且该包包括角点,那么您需要做的就是简化包,直到它只有 6 个点。

有很多方法可以简化多边形,例如你可以使用这个答案中使用的简单算法:如何在图像中找到矩形的角坐标

do
   for each point P on the convex hull: 
       measure its distance to the line AB _ 
       between the point A before P and the point B after P, 
   remove the point with the smallest distance 
repeat until 6 points left

如果您不知道确切的点数,则可以删除点,直到最小距离超过某个阈值

你也可以做Ramer-Douglas-Peucker来简化多边形,openCV 已经在cv::approxPolyDP中实现了。

只需修改openCV 正方形样本以使用 6 个点而不是 4 个

于 2012-04-21T20:31:16.757 回答
2

与其尝试直接确定哪些特征点对应于角点,不如在整个图像上应用角点检测算法,然后寻找哪些特征点出现在角点检测器中的峰值附近?

我建议从Harris 角检测器开始。OpenCV 的实现是cv::cornerHarris

本质上,Harris 算法将水平和垂直Sobel 滤波器应用于图像(或图像在 x 和 y 方向上的偏导数的一些其他近似)。

然后它在每个图像像素处构造一个 2×2结构矩阵,查看该矩阵的特征值,如果两个特征值都高于某个阈值,则调用点角。

于 2012-04-21T18:03:23.063 回答