c++ - OpenCV 模板匹配 N 个最佳匹配不起作用

标签 c++ opencv

我已经为此苦苦挣扎了很长一段时间,但似乎找不到这里的问题。让我尝试引导您完成整个过程。

我正在尝试为我的模板匹配获取 10 个最佳边界框。

这里不会显示整个图像,但这是我的 cv::mat当我循环遍历cv::mat时搜索最低值(结果)

 int a,b;
    for ( a = 0; a < final_image_height; a++){
      for ( b = 0; b < final_image_width; b++){
        if (result_scores_mat.at<float>(a, b) < 70 ){
          printf("%.2f ", result_scores_mat.at<float>(a, b));
        }
      }
    }

这给了我 cv::mat 中存在的一些值具有“较低的值”

68.50 68.93 54.50 68.92 64.62 57.12 62.69 65.86 63.52 68.35 68.65 61.93 69.18 67.69 

然后我进入一个循环,我调用 minMaxLoc()找到 minVal (using TM_SQDIFF, so minVal)

for ( i = 0; i < 10; i++){
      minMaxLoc(result_scores_mat, &minVal, &maxVal, &minLoc, &maxLoc, cv::Mat());

      cout<<minVal<<endl;

      // for match_method TM_SQDIFF we take lowest values
      matchLoc = minLoc;
      drawRadius = result_radius_mat.at<float>(matchLoc.x, matchLoc.y); 

      // display source image and result matrix , draw rectangle around highest possible matching area
      cv::rectangle( img_display_mat, matchLoc, cv::Point( matchLoc.x + 2*drawRadius, matchLoc.y + 2*drawRadius), cv::Scalar::all(255), 2, 8, 0);  

      result_scores_mat.at<float>(minLoc.x, minLoc.y)= 255;
    }

我在最后一行所做的是将 minLoc 处的浮点值替换为,以便我运行下一个循环 minMaxLoc没有找到该点并给我 cv::mat 中的下一个最小值.

但是,我不断收到这样的输出 cout<<minVal<<endl;

54.5003
54.5003
54.5003
54.5003
54.5003
54.5003
54.5003
54.5003
54.5003
54.5003

它正确检测到 cv::mat 中存在的 54.50 ,但我想要循环中的所有最小值。

我做错了什么,或者有什么办法可以解决这个问题吗?非常感谢!

最佳答案

看来您以错误的方式用 255 替换最小值,这意味着您正确检测了最小值,但是您在错误的位置替换了 255,您应该替换下面的行

result_scores_mat.at<float>(minLoc.x, minLoc.y)= 255;

通过这一行:

result_scores_mat.at<float>(minLoc.y, minLoc.x)= 255;

要了解为什么我们要互相替换这些行,您可以查看 source code .at 方法。如下所示

template<typename _Tp> _Tp& at(int row, int col);
/** @overload
@param row Index along the dimension 0
@param col Index along the dimension 1
*/

关于c++ - OpenCV 模板匹配 N 个最佳匹配不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59485106/

相关文章:

c++ - 复制构造函数 VS 以类指针为参数的构造函数

xcode - dyld 未加载原因 : image not found libopencv_core. 2.4.dylib

python - OpenCV深度学习人脸检测断言函数 'cv::dnn::ConvolutionLayerImpl::getMemoryShapes'错误

python - reshape OpenCV 图像 (numpy) 尺寸

c++ - 死锁线程tcp服务器

c++ - 如何在 R 中进行内联 C++ 函数调用?

c++ - 无法在 native 代码中使用 jstring 作为参数

c++ - 为什么使用两个 sizeof 来检查一个类是否是默认可构造的,而一个却不行?

c# - 如何在 emgucv c# 上实现非锐化 mask

python - 在OpenCV中获取多个小轮廓的外部轮廓