- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想使用 C++ 中的 OpenCV 库在 SparseMat 矩阵中找到 max 的位置。我尝试了以下不起作用的代码:
int Tdim=1;
int Tsize[]={2,3};
SparseMat samplesT(Tdim,Tsize,CV_32F);
int el[]={1,2}; // max location
samplesT.ref<float>(el)=5; // setting max value
double TmaxVal, TminVal;
int TmaxIdx, TminIdx;
minMaxLoc(samplesT, &TminVal, &TmaxVal, &TminIdx, &TmaxIdx);
cout<<"TmaxIdx= "<<(TmaxIdx)<<endl; // returns: 1
cout<<"TmaxVal= "<<(samplesT.ref<float>(TmaxIdx))<<endl; // returns: 5
真的很奇怪
samplesT.ref<float>(TmaxIdx)
正确返回矩阵的最大值,但是,TmaxIdx 仅包含矩阵中最大值的行!
我将不胜感激任何可用于在 OpenCV SparseMat 矩阵中找到最大值的 x 和 y 的方法。
最佳答案
有两个问题。首先,由于 Tdim
等于 1,您使用的是一维矩阵而不是二维矩阵,因此您需要将 Tdim
设置为 2。另一个问题是 TmaxIdx
和 TminIdx
应该是长度为 2 的整数数组,而不是单个整数(因为您正在寻找二维坐标)。通过该更改,您将获得以下内容:
int TmaxIdx[2], TminIdx[2];
minMaxLoc(samplesT, &TminVal, &TmaxVal, TminIdx, TmaxIdx);
然后你可以验证下面的解决方案:
fprintf(stdout, "TmaxIdx= (%d,%d)\n", TmaxIdx[0], TmaxIdx[1]); // TmaxIdx= (1, 2)
关于c++ - 在 OpenCV 中查找 SparseMat 的最大和最小位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33946468/
我正在 OpenCV 中处理 3D 稀疏矩阵,当我尝试调用 cv::SparseMat (http://docs.opencv.org/modules/core/doc/basic_structure
我正在使用 CV_32FC3 的 SparseMat 并尝试执行以下操作: int dims = 2; int size[] = {10,10}; SparseMat m = Spar
我想使用 C++ 中的 OpenCV 库在 SparseMat 矩阵中找到 max 的位置。我尝试了以下不起作用的代码: int Tdim=1; int Tsize[]={2,3}; Sp
opencv中Mat和Sparse Mat有什么区别?什么时候使用每一个? 最佳答案 cv::Mat 和 cv::SparseMat 之间的主要区别在于它们在内部存储数据的方式。 cv::Mat 使用
我是一名优秀的程序员,十分优秀!