我已经编写了算法来提取图像中显示的点。它们形成凸形,我知道它们的顺序。如何从这些点中提取角(前 3 和底部 3)?我正在使用opencv。
问问题
3851 次
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 回答