1

我检查了 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;
}
4

3 回答 3

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));
于 2012-04-22T12:01:21.537 回答
0

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

  1. minMaxLoc()使用-> max_val获得最大值。

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

  3. 决定如何处理这些位置。
    比如说,您可以轻松检测热点、max-es 的大块或 max-es 的连接组件。(用扩张和腐蚀,然后在现场中心使用 floodFill,一个接一个。)

于 2012-11-23T03:05:43.347 回答
0

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

于 2012-08-29T14:42:52.137 回答