【问题标题】:Finding max and min locations of a SparseMat in OpenCV在 OpenCV 中查找 SparseMat 的最大和最小位置
【发布时间】:2015-11-26 20:24:14
【问题描述】:

我想使用 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 矩阵中最大值的 xy

【问题讨论】:

    标签: c++ opencv max sparse-matrix


    【解决方案1】:

    有两个问题。首先,由于 Tdim 等于 1,因此您使用的是 1D 矩阵而不是 2D 矩阵,因此您需要将 Tdim 设置为 2。另一个问题是 TmaxIdxTminIdx 应该是 int 数组长度为 2,而不是单个整数(因为您正在寻找 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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-29
      • 2013-11-12
      • 2012-09-05
      • 2012-09-16
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 2018-08-27
      相关资源
      最近更新 更多