ошибка неопределенных значений на определенных значениях - PullRequest
0 голосов
/ 02 ноября 2011

У меня для цикла вроде так

 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]);
         int num_red = 0;
         //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]);

        if (s.val[2]<=255 && s.val[2]>=230 && s.val[1]<=40 && s.val[1]>=0 && s.val[0] <=40 && s.val[0]>=0)
        {
            printf("Red Ball\n");
            num_red++;
        }

который работает. но позже в своем коде я попытался использовать s.val[] и num_red как это

int count_red = 0;
int red_pot = 0;
if(s.val[2]<=255 && s.val[2]>=230 && s.val[1]<=40 && s.val[1]>=0 && s.val[0] <=40 && s.val[0]>=0)
    count_red ++;//count the reds detected
num_red - count_red = red_pot;//originally detected - whats left = whats potted

я получаю необъявленную ошибку идентификатора для 's'. Слева от .val должен быть class / struct и num_red: необъявленный идентификатор. Я не понимаю, почему программа не может прочитать эти значения сверху вниз. кто-нибудь сможет помочь?

1 Ответ

0 голосов
/ 02 ноября 2011

Вы создаете s внутри цикла for. Поэтому, как только цикл for завершается, s выходит из области видимости. Вам необходимо создать переменную в области, которая включает в себя каждую область, в которой вы собираетесь получить к ней доступ.

...