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 を 1 つずつ使用します。)

于 2012-11-23T03:05:43.347 に答える
0

関数についてcv::compareは、各ピクセルを指定された数値と比較し、条件が満たされた場合は出力配列を 255 で設定し、それ以外の場合は 0 に設定します。

于 2012-08-29T14:42:52.137 に答える