Opencv 从凸点获取角点
我已经编写了算法来提取图像中显示的点。它们形成凸形,我知道它们的顺序。如何从这些点提取角点(顶部3和底部3)? 我正在使用opencvOpencv 从凸点获取角点,opencv,computer-vision,edge-detection,Opencv,Computer Vision,Edge Detection,我已经编写了算法来提取图像中显示的点。它们形成凸形,我知道它们的顺序。如何从这些点提取角点(顶部3和底部3)? 我正在使用opencv 与其直接确定哪些特征点对应于角点,不如在整个图像上应用角点检测算法,然后在角点检测器中查找哪些特征点接近峰值 我建议从一开始。OpenCV实现是 本质上,哈里斯算法将水平方向和垂直方向应用于图像(或图像在x和y方向的偏导数的其他近似值) 然后,它在每个图像像素处构造一个2乘2矩阵,查看该矩阵的特征值,如果两个特征值都高于某个阈值,则调用点角点。如果您已经拥有对象
与其直接确定哪些特征点对应于角点,不如在整个图像上应用角点检测算法,然后在角点检测器中查找哪些特征点接近峰值 我建议从一开始。OpenCV实现是 本质上,哈里斯算法将水平方向和垂直方向应用于图像(或图像在x和y方向的偏导数的其他近似值)
然后,它在每个图像像素处构造一个2乘2矩阵,查看该矩阵的特征值,如果两个特征值都高于某个阈值,则调用点角点。如果您已经拥有对象的凸包,并且该外壳包含角点,然后你需要做的就是简化船体,直到它只有6个点 有许多方法可以简化多边形,例如,您可以使用此答案中使用的简单算法: 如果不知道点的确切数量,则可以删除点,直到最小距离超过某个阈值 您还可以简化多边形,openCV已经在中实现了这一点
只需修改为使用6点而不是4点问题是,我没有让harris检测拐角上的拐角。我得到的是:太好了!我尝试了你提出的解决方案,效果非常好!我还将研究Ramer算法。Ramer-Douglas-Peucker算法有很多用途。很高兴HugoRune提出了这个建议。如果您对此进行了修补,请务必举例说明设置不同epsilon值的效果。另一种选择是计算轮廓上两点之间的距离与图形中两点之间的距离之比,以找到好的方形角或不规则角。对于直线上的点,该比为1:1。
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