0

編集:解決しました。使用してピクセルにアクセスする必要がありました

    (int)bw.at<uchar>(r,c)

学校でのプロジェクトでは、ボールを検出してその位置を計算する必要があります。これはカラー セグメンテーションを使用して行います。inRange を使用してボールの色をチェックし、結果としてバイナリ イメージを取得します。少なくとも、表示すると画像が白黒なので、バイナリだと思います。

ここで、検出されたすべてのピクセルの x 座標と y 座標の平均を取るだけで、ボールの位置を取得しようとしています。奇妙なことに、y の値は正しいのに、x の値は完全に間違っています。

これが私のコードです:

    int k = 0;
    int x = 0;
    int y = 0;
    ofstream myfile;
    myfile.open ("example.txt");
    for(int c = 0; c < bw.cols; c++){
    for(int r = 0; r < bw.rows; r++){

            if(bw.at<int>(r,c) != 0){
                x += c;
                y += r;
                cout << "x: " << c << " y: " << r << endl;
                k++;
                myfile << 1;
            }else{
                myfile << 0;
            }
        }
        myfile << endl;
    }
    myfile.close();
    bal.set_pos(x/k,y/k);

各ピクセルの x 座標と y 座標を出力し、y 座標は正しいですが、x 座標は 4 つの異なるグループにグループ化されています。最初のグループの値は約 88、2 番目のグループの値は約 248、3 番目のグループは 408、4 番目のグループは 569 です。ただし、350 から 360 の間です。

4

0 に答える 0