gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:52:24 30 4
gpt4 key购买 nike

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

enter image description here

如何使用 OpenCV 实现该目标?

我想到了 cv::matchTemplate,但是我不确定它会如何处理不同的 pawn 背景。我也不确定我是否可以通过这种方式轻松获得所有匹配项。

最佳答案

从角点检测(众所周知的 shi tomasi 方法,或类似于线检测和交叉点的 smt,因为它应该更适合您的情况)和 64 个图像子样本的集合 - 正方形开始。如果电路板是理想的——纯粹的鸟瞰图——而且你知道尺寸(这里是 8x8),那么就把它裁剪成宽 x 高的部分。您应该保存这些样本及其坐标(b6、h1 等)。

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

您可以尝试从棋盘的初始状态获取轮廓,并命名它们。这是你的训练数据。因为碎片不会有太大差异; 1 个样本就足够了 :) 保存一个“白色棋子”(最初是第二行的任何方 block )区域、hu 时刻和颜色(平均 rgb 值是可以的)。然后保存一个“黑棋子”。然后是“白皇后”和“黑皇后”(d4 d8)。为所有棋子做那个区域、时刻、颜色表。

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

最后你确定了你的轮廓smt像黑骑士,红格子等等。

关于C++/OpenCV 在图像上查找对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23716623/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com