編集:解決しました。使用してピクセルにアクセスする必要がありました
(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 の間です。