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

3

我想在使用C++中的OpenCV库时,在SparseMat矩阵中找到最大值的位置。 我尝试了以下代码,但它并不起作用:

  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

真的很奇怪,

涉及IT技术方面的内容。
 samplesT.ref<float>(TmaxIdx)

这个函数可以正确返回矩阵的最大值,但是TmaxIdx只包含了矩阵中最大值所在的

我希望能找到任何方法来寻找OpenCV SparseMat矩阵中最大值的xy

1个回答

2

有两个问题。首先,由于Tdim等于1,您正在使用一维矩阵而不是二维矩阵,因此需要将Tdim设置为2。另一个问题是TmaxIdxTminIdx应该是长度为2的int数组,而不是单个int(因为您正在寻找二维坐标)。做出这些更改后,您将得到以下结果:

int TmaxIdx[2], TminIdx[2];
minMaxLoc(samplesT, &TminVal, &TmaxVal, TminIdx, TmaxIdx);

那么,您可以验证以下解决方案:
fprintf(stdout, "TmaxIdx= (%d,%d)\n", TmaxIdx[0], TmaxIdx[1]); // TmaxIdx= (1, 2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接