gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:39:01 28 4
gpt4 key购买 nike

我想使用 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 的方法。

最佳答案

有两个问题。首先,由于 Tdim 等于 1,您使用的是一维矩阵而不是二维矩阵,因此您需要将 Tdim 设置为 2。另一个问题是 TmaxIdxTminIdx 应该是长度为 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com