for (int i = 0; i < circles->total; i++)
{
// round the floats to an int
float* p = (float*)cvGetSeqElem(circles, i);
cv::Point center(cvRound(p[0]), cvRound(p[1]));
int radius = cvRound(p[2]);
//uchar* ptr;
//ptr = cvPtr2D(img, center.y, center.x, NULL);
//printf("B: %d G: %d R: %d\n", ptr[0],ptr[1],ptr[2]);
CvScalar s;
s = cvGet2D(img,center.y, center.x);//colour of circle
printf("B: %f G: %f R: %f\n",s.val[0],s.val[1],s.val[2]);
// draw the circle center
cvCircle(img, center, 3, CV_RGB(0,255,0), -1, 8, 0);
// draw the circle outline
cvCircle(img, center, radius+1, CV_RGB(0,0,255), 2, 8, 0);
//display coordinates
printf("x: %d y: %d r: %d\n",center.x,center.y, radius);
上記のコードは、22個のボールを検出し、各ボールのrgb値を抽出します。 icanはこのrgb値を使って各ボールの色を決定します。私は白球が最初に当る色ボールの検出を実装しようとしています。私のアイデアは白いボールの中心が変わる(つまり移動する)のを待つことでした。そして中心が変化する次の色のボールは、それが当たるボールです。私はこれをコーディングするのに問題がありますか?カラーボールの衝突
ではありませんあなたは既に私はこれを行うつもりだったこの正確な同じ質問... http://stackoverflow.com/questions/8767205/ball-collision-detection –