OpenCV から読み取った座標に従ってオブジェクトを追跡します。問題は、サーボを正方向に 120 度回転させるには、サーボにさらに 3300 を送信する必要があるということです。(1 度の場合、サーボにさらに 27.5 を送信する必要があります)。
次に、OpenCV から読み取った座標と、サーボに送信する必要がある値との関係を見つける必要があります。しかし、OpenCV の座標がわかりませんでした。たとえば、オブジェクトの高さを変更せず、オブジェクトとカメラの間の距離を減らすだけです。その場合、z 値だけが減少するはずですが、x 値も大幅に変化するようです。その理由は何ですか?
コードに問題がある場合 (x は変更されていない可能性がありますが、読み方が間違っている可能性があります)、OpenCV 座標とその解釈方法に関する情報を教えてください。最初に言ったように、OpenCV から読み取ったボールの X 座標の変化に対応するサーボの回転角度のような関係を見つける必要がありますか?
よろしく
@FvD の edit1:
int i;
for (i = 0; i < circles->total; i++)
{
float *p = (float*)cvGetSeqElem(circles, i);
printf("Ball! x=%f y=%f r=%f\n\r",p[0],p[1],p[2] );
CvPoint center = cvPoint(cvRound(p[0]),cvRound(p[1]));
CvScalar val = cvGet2D(finalthreshold, center.y, center.x);
if (val.val[0] < 1) continue;
cvCircle(frame, center, 3, CV_RGB(0,255,0), -1, CV_AA, 0);
cvCircle(frame, center, cvRound(p[2]), CV_RGB(255,0,0), 3, CV_AA, 0);
cvCircle(finalthreshold, center, 3, CV_RGB(0,255,0), -1, CV_AA, 0);
cvCircle(finalthreshold, center, cvRound(p[2]), CV_RGB(255,0,0), 3, CV_AA, 0);
}