在下面的图片中,我具有绿点的2D位置,我想计算红点的位置,或者作为中间步骤,我要计算蓝点的位置。全部为2D。
当然,我不仅要在上面的图片中找到这些位置。最后,我需要一种自动化算法,该算法采用一组棋盘格角点来计算外角。
我需要得到的坐标尽可能准确,所以我认为我需要一个不仅考虑外部绿点的解决方案,而且还使用所有其他绿点的位置来计算最适合的解决方案。外角(红色或蓝色)。
如果OpenCV可以做到这一点,请指出我的方向。
最佳答案
通常,如果您仅检测到某些而不是全部内部角落,则无法解决问题。这是因为配置对于平移而言是不变的-将物理棋盘格移动整个正方形会在图像上产生相同的检测到的拐角位置,但是由于物理拐角不同。
此外,该配置也不会因在棋盘平面中旋转180度而变化,除非小心区分每个角附近的正方形的颜色,否则旋转90度以及相对于中心线和中线的反射不会改变。
这意味着,除了检测角点之外,还需要从图像中提取物理棋盘的某些特征,这些特征可用于打破上述不变性。最简单的方法是检测一行和一列的所有9个角,或者至少检测它们的底角。通过施加线条成90度角的条件,可以将它们直接用于校正图像。然而,由于阻塞或检测器故障,这可能变得不可能,并且可能需要更复杂的方法。
例如,您可以尝试直接检测棋盘边缘,即边界处的粗黑线。例如,一种方法是检测附近的字母和数字,并使用这些位置将线检测器约束到附近区域。
顺便说一句,如果您发布的照片只是一条红色鲱鱼,并且您对检测一般的棋盘状图案感兴趣,并且可以控制图案的种类,则可以使用更强大的方法来进行操作。我个人最喜欢的是"known 2D crossratios" pattern of Matsunaga and Kanatani.
关于opencv - 查找棋盘格外角,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26452429/