C ++ / OpenCV在图像上查找对象

时间:2014-05-17 22:19:52

标签: c++ opencv

我必须在图像上找到几个对象。例如,在棋盘上找到所有黑色棋子:

enter image description here

如何使用OpenCV实现这一目标?

我认为cv :: matchTemplate,但是我不确定如何继续使用不同的pawn背景。我也不确定我是否能够以这种方式轻松获得所有匹配。

1 个答案:

答案 0 :(得分:1)

从角落检测开始(众所周知的shi tomasi方法,或类似于线检测和交叉的smt,因为它应该更适合您的情况)和64个图像子样本的集合 - 正方形。如果电路板是理想的 - 纯鸟眼观 - 你知道尺寸(这里是8x8),然后将其裁剪成WxH片。您应该使用它们的坐标(b6,h1等)保存这些样本。

对于每个方格,低通滤波器像高斯滤波器一样,然后otsu阈值和轮廓检测应该最多给你一个大的轮廓。如果没有,则该方格为空。

您可以尝试从电路板的初始状态获取轮廓,并命名它们。这是您的训练数据。因为碎片不会有太大差别; 1个样本就够了:)保存一个“白色典当”(最初从第2行开始的任何方格)区域,胡子和颜色(平均值rgb值正常)。然后保存一个“黑棋子”。然后是“白皇后”和“黑皇后”(d4 d8)。为所有作品做那个区域,时刻,颜色表。

稍后,对于任何状态的棋盘,您可以尝试使用您的识别表来匹配胡子时刻,颜色和这些方格的输出面积。当然,像knn这样的统计方法可以帮助你。您还可以使用matchShapes方法。

最后你会发现你的轮廓像黑骑士,红色棋子等等。

相关问题