我想在SparseMat矩阵中找到max的位置,使用C ++中的OpenCV库。 我尝试了以下不起作用的代码:
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 。
答案 0 :(得分:2)
有两个问题。首先,由于Tdim
等于1,您使用的是1D矩阵而不是2D矩阵,因此您需要将Tdim
设置为2.另一个问题是TmaxIdx
并且TminIdx
应该是长度为2的int数组,而不是单个int(因为您正在寻找2D坐标)。通过该更改,您将获得以下内容:
int TmaxIdx[2], TminIdx[2];
minMaxLoc(samplesT, &TminVal, &TmaxVal, TminIdx, TmaxIdx);
然后您可以验证以下解决方案:
fprintf(stdout, "TmaxIdx= (%d,%d)\n", TmaxIdx[0], TmaxIdx[1]); // TmaxIdx= (1, 2)