我已经为此苦苦挣扎了很长一段时间,但似乎找不到这里的问题。让我尝试引导您完成整个过程。
我正在尝试为我的模板匹配获取 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
它正确检测到 54.50 存在于cv::mat
,但我想要循环中的所有最小值。
我做错了什么,或者有什么办法可以解决这个问题吗?太感谢了!