【问题标题】:recognizing small objects in opencv在opencv中识别小物体
【发布时间】:2013-06-19 13:24:35
【问题描述】:

我正在使用 Chessboard 使用 OpenCV 进行 3D 校准项目。校准工作正常,但我想识别棋盘中也是黑色的物体,并且应该彼此不同,如下图所示。我不知道该怎么做。哪些 OpenCV 函数有助于实现这一目标?

在@Aurelius 的建议之后,我尝试使用 cv::matchTemplate,当我第一次运行它时它运行良好,但是当我在捕获时运行它时,结果完全错误,请参阅下一张图片

知道如何解决这个问题

【问题讨论】:

  • 如果您有要检测的图形的模板,请使用 SIFT 或 SURF 特征检测。
  • 我已经尝试过使用 opencv 的示例代码,它不能只识别我的对象??
  • 所以我刚刚在这张图片上实现了canny,并使用了findLines。由于这是一个非常好的图像,您可以轻松获得线条。现在,根据线段的长度,您可以从图像中删除大线,您将只剩下您想要的对象。现在,您可以训练 haar 分类器或简单地使用模板来识别对象。如果对象足够简单,如果您的形状足够简单,您也可以使用霍夫变换。

标签: c++ opencv


【解决方案1】:

如果您提前知道这些形状会是什么样子,并且您的棋盘图像像您的示例一样直接拍摄,那么它看起来是 cv::matchTemplate() 的完美案例。下面的代码在图像中搜索与模板图像最匹配的区域。

cv::Mat chessboard = cv::imread(path_to_image);
cv::Mat template1 = cv::imread(temp1_path);
cv::Mat template2 = cv::imread(temp2_path);

cv::Mat cross_corr;
cv::Point maxloc;

// Find the first template
cv::matchTemplate(chessboard, template1, cross_corr, CV_TM_CCORR_NORMED);
cv::minMaxLoc(cross_corr, nullptr, nullptr, nullptr, &maxloc);    //Only want location of maximum response
cv::Rect t1rect(maxloc,template1.size());

//Find the second template
cv::matchTemplate(chessboard, template2, cross_corr, CV_TM_CCORR_NORMED);
cv::minMaxLoc(cross_corr, nullptr,nullptr,nullptr,&maxloc);
cv::Rect t2rect(maxloc, template2.size());

//Draw the results
cv::rectangle(chessboard, t1rect, cv::Scalar(255,0,0), 3);
cv::rectangle(chessboard, t2rect, cv::Scalar(0,0,255), 3);
cv::imshow("detection", chessboard);

使用这些模板: 上面的代码产生以下输出:

【讨论】:

  • 非常感谢您的帮助,确实可以,但是当我尝试在帧捕获上运行程序时,结果完全错误!查看我的编辑
  • @Engine 正如下一个答案所说,模板匹配不是旋转不变的。我看到的另一种选择是使用模板匹配,但将同一块的 10-15 个图像作为模板。找到所有这些并比较匹配项。最相似的将是正确的匹配并且您找到了对象。
  • @Engine 您可能会考虑对捕获的图像进行反变形(可能通过cv::findHomography()cv::warpPerspective())以获得棋盘方块出现且没有任何透视失真的图像。然后,您可以尝试为每个模板使用四个图像进行模板匹配(每 90 度旋转一个)。它不是很优雅,但它可能会起作用。然而,在任意方向找到无纹理的形状不是一个简单的问题。
【解决方案2】:

模板匹配不是旋转不变的。在模板匹配之前是否旋转棋盘图像(这是需要校准的)。

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2013-12-15
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多