OpenCV从矩阵获取条件基数最大元素位置

时间:2012-04-22 10:53:01

标签: c++ opencv matrix max

我检查了minMaxLoc,但它只给出了矩阵的最大和最小位置。我需要找到的是最大或等于其他数字。例如(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;
}

3 个答案:

答案 0 :(得分:1)

我不知道任何内置函数,这正是如此。您可以将矩阵与一个给出布尔矩阵的元素进行比较。但我不知道任何能给你每个非零元素位置的函数,比如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));

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

  1. minMaxLoc() - &gt;获得最大值MAX_VAL。

  2. 使用inRange(input, max_val, max_val, output_mask)将所有最大元素设为白色。

  3. 决定如何处理这些位置。
    比如,你可以很容易地发现热点,最大的斑点或 连接的max-es组件。 (扩张和侵蚀然后 在现场中心使用floodFill,一个接一个。)