gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 06:57:14 24 4
gpt4 key购买 nike

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

我正在尝试为我的模板匹配获取 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/

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