在OpenCV中查找SparseMat的最大和最小位置

时间:2015-11-26 20:24:15

标签: c++ opencv max sparse-matrix

我想在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

1 个答案:

答案 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)