C++ 从OpenCV Mat获取值
我的程序中有一个通道矩阵,下一个定义为:C++ 从OpenCV Mat获取值,c++,opencv,matrix,double,C++,Opencv,Matrix,Double,我的程序中有一个通道矩阵,下一个定义为: matchingResult.create(result_cols, result_rows, CV_32FC1); 它不是颜色矩阵。 我使用minMaxLoc方法查找最小值和最大值的位置: double minValue; double maxValue; cv::Point minLocation; cv::Point maxLocation; cv::minMaxLoc(_matchingMap, &minValue,
matchingResult.create(result_cols, result_rows, CV_32FC1);
它不是颜色矩阵。我使用minMaxLoc方法查找最小值和最大值的位置:
double minValue;
double maxValue;
cv::Point minLocation;
cv::Point maxLocation;
cv::minMaxLoc(_matchingMap, &minValue, &maxValue, &minLocation, &maxLocation);
此方法返回正确的值:
最小值:-287909最大值:682182最小位置:[5,1]最大位置:
[4,2]
如果我把矩阵打印到cout中,我会得到同样的结果
但我无法使用最大值的位置(maxLocation)从矩阵中获得相同的值,也无法更改最大值的值。如果我试图获得价值:
double value = _matchingMap.at<double>(maxLocation);
std::cout<<"Value for "<<maxLocation << " is "<<value << std::endl;
double value=\u matchingMap.at(maxLocation);
std::cout当您使用32FC1初始化Mat时,您分配32位的单元格,这些单元格在C中由float
表示。为了使用双精度矩阵,即64位浮点值,您需要使用64FC1
因此,要么将矩阵更改为双倍,要么使用at
您的矩阵是32FC1,因此您需要使用at
谢谢,这对我很有帮助,您可以发布答案并解释32位和64位体系结构吗?我的错误是,我发现单位是4位。我应该更加注意网络资源。