[英]C++/OpenCV find objects on an image
我必须在图像上找到几个对象。 例如,在棋盘上找到所有黑色的棋子:
如何使用OpenCV实现呢?
我考虑了cv :: matchTemplate,但是我不确定在不同的pawn背景下如何进行。 我也不确定是否可以通过这种方式轻松获得所有匹配项。
从角点检测(众所周知的shi tomasi方法,或像线检测和相交之类的smt开始,因为它可以更好地适合您的情况)开始,并收集64个图像子样本-正方形。 如果板是理想的-纯鸟瞰图-并且您知道大小(此处为8x8),则只需将其裁剪为WxH块即可。 您应该保存这些样本及其坐标(b6,h1等)。
对于每个正方形,低通滤波器都像高斯一样,然后otsu阈值和轮廓检测应该最多为您提供一个大轮廓。 如果没有,则该正方形为空。
您可以尝试从板的初始状态获取轮廓,并为其命名。 这是您的训练数据。 由于碎片不会有太大差异; 一个样本就足够了:)保存一个“白色棋子”(最初是从第二行开始的任何正方形)的面积,时间和颜色(平均rgb值确定)。 然后保存一个“黑色典当”。 然后是“白皇后”和“黑皇后”(d4 d8)。 为所有零件做该区域,时刻,颜色表。
以后,对于木板的任何状态,您都可以尝试使用识别表来匹配弯矩,轮廓的颜色和面积-这些正方形的输出。 当然,某些统计方法(例如knn)可以为您提供帮助。 您还可以使用matchShapes方法。
最后,确定轮廓轮廓,例如黑色骑士,红色方格棋子等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.