Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenCV从矩阵中获取条件基最大元素位置_C++_Opencv_Matrix_Max - Fatal编程技术网

C++ OpenCV从矩阵中获取条件基最大元素位置

C++ OpenCV从矩阵中获取条件基最大元素位置,c++,opencv,matrix,max,C++,Opencv,Matrix,Max,我已经检查了minMaxLoc,但它只给出了矩阵的最大和最小位置。我需要找到的是最大值或等于其他数字。e、 g.(abc>=7)然后给出该条件适用的矩阵中的所有位置 Matlab示例: [a,b]=find(heMap>=(max(max(heMap))) 那么,我如何满足opencv中的条件来获得特定的最大值或最小值呢。?好心帮忙 问候 目前我正在使用这种方式 double getMaxValue(Mat hemap) { MatConstIterator_<double> it

我已经检查了minMaxLoc,但它只给出了矩阵的最大和最小位置。我需要找到的是最大值或等于其他数字。e、 g.(abc>=7)然后给出该条件适用的矩阵中的所有位置

Matlab示例: [a,b]=find(heMap>=(max(max(heMap)))

那么,我如何满足opencv中的条件来获得特定的最大值或最小值呢。?好心帮忙

问候

目前我正在使用这种方式

double getMaxValue(Mat hemap)
{
MatConstIterator_<double> it = hemap.begin<double>(), it_end = hemap.end<double>();
double maxdata=0;

for(; it != it_end; ++it)
{
    if(*it>maxdata)
    {
        maxdata = *it;
    }
}

return maxdata;
}
double getMaxValue(Mat hemap)
{
matconditor_uu=hemap.begin(),it_uend=hemap.end();
双maxdata=0;
for(;it!=it_end;++it)
{
如果(*it>maxdata)
{
maxdata=*it;
}
}
返回maxdata;
}

我不知道有什么内置函数可以做到这一点。您可以将矩阵与给出布尔矩阵的元素进行比较。但是我不知道有什么函数能给出每个非零元素的位置,比如
find

但在阵列上循环并自己进行比较非常简单:

int thresh = 50;
for(int y=0;y<matrix.rows; y++)
  for(int x=0;x<matrix.cols; x++)
    if( matrix.at<uchar>(y,x) >= thresh)
      printf(" (%d,%d) = %d\n",x,y, matrix.at<uchar>(y,x));
int thresh=50;

对于(int y=0;y,我不知道任何内置函数能做到这一点。你可以将你的矩阵与给出布尔矩阵的元素进行比较。但是我不知道任何函数能给出每个非零元素的位置,比如
find

但在阵列上循环并自己进行比较非常简单:

int thresh = 50;
for(int y=0;y<matrix.rows; y++)
  for(int x=0;x<matrix.cols; x++)
    if( matrix.at<uchar>(y,x) >= thresh)
      printf(" (%d,%d) = %d\n",x,y, matrix.at<uchar>(y,x));
int thresh=50;

对于(int y=0;y关于
cv::compare
函数,它将每个像素与给定的数字进行比较,如果条件满足,则将输出数组设置为255,否则为0。

关于
cv::compare
函数,它将每个像素与给定的数字进行比较,如果条件满足,则将输出数组设置为255。

2+1步解决方案:

  • 使用
    minMaxLoc()
    ->max\u val获得最大值

  • 使用范围(输入、最大值、最大值、输出掩码)中的

  • 决定如何处理这些位置。
    比如说,你可以很容易地检测到热点、大斑点或大斑点 最大es的连接部件(膨胀和腐蚀,然后 在现场中心逐个使用洪水填充。)


  • 我给你一个2+1步骤的解决方案:

  • 使用
    minMaxLoc()
    ->max\u val获得最大值

  • 使用范围(输入、最大值、最大值、输出掩码)中的

  • 决定如何处理这些位置。
    比如说,你可以很容易地检测到热点、大斑点或大斑点 最大es的连接部件(膨胀和腐蚀,然后 在现场中心逐个使用洪水填充。)


  • 谢谢你的回复,我已经试过循环部分了,但是我想知道是否有任何方法我可以用functor或其他什么来更改迭代部分…我在我的问题中尝试了上面的代码我添加了编辑一个hanks用于回复,我已经试过循环部分了,但是我想知道是否有任何方法我可以用functor o来更改迭代部分我在我的问题中尝试了上面的代码,我添加了编辑代码