0

opencvを使用して、画像マトリックス内の最小強度の点を計算するために、次の関数を作成しました。ただし、強度が最小のポイントとして常にポイント0,0を取得しており、強度の値も-2142489423のようにばかげています。誰かがこれを手伝ってくれる?

imgは入力画像行列であり、minlocは最小強度のcvPointを返します。

int min_Loc(Mat img, Point minloc)
{

    cvtColor(img, img, CV_RGB2GRAY); 
    int x1;
    int y1;
    int x2;
    int y2;

    x1 = 0;
    x2 = img.rows;
    y1 = 0;
    y2 = img.cols;

    int min = std::numeric_limits< int >::max();
    int currentval;
    for (int j=y1; j<y2; j++)
    {

        for (int i=x1; i<x2; i++){
            currentval = img.at<int>(j,i);
            if(currentval < min){
                min = std::min<int>( currentval, min );
                minloc.x = i;
                minloc.y = j;
            }
        }

    }

    return min;


}
4

2 に答える 2

1

OpenCVは、関数cv :: minMaxLocで、(単一チャネル)マトリックスの最小値と最大値、およびそれらの位置を見つける機能を提供することに注意してください。

于 2012-12-11T10:54:12.947 に答える
1

あなたの機能

int min_Loc(Mat img, Point minloc)

minlocを返しません。整数を返し、値によってマットとポイントを取ります。minlocの値を変更し、min_Loc()を呼び出した後もその値を維持できるようにする場合は、次のようなパラメーターとしてポインターまたは参照を使用する必要があります。

int min_loc(Mat * img, Point * minloc)
{
...
minloc->x = i;
minloc->y = j;
...
return min;
}

関数の呼び出しは次のようになります。

min_loc(&img, &minloc);

これは、その前に次のような呼び出しがあることを前提としています。

Mat img = ...;
Point minloc = ...;

詳細:C ++でいつ参照を渡すか、いつポインターを渡すか。

于 2012-12-11T09:35:41.820 に答える