ошибка неопределенных значений для определенных значений

#opencv #undefined #identifier

#opencv #не определено #идентификатор

Вопрос:

У меня есть цикл for, например, так

  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: %dn", ptr[0],ptr[1],ptr[2]);
         CvScalar s;

         s = cvGet2D(img,center.y, center.x);//colour of circle
        printf("B: %f G: %f R: %fn",s.val[0],s.val[1],s.val[2]);

        if (s.val[2]<=255 amp;amp; s.val[2]>=230 amp;amp; s.val[1]<=40 amp;amp; s.val[1]>=0 amp;amp; s.val[0] <=40 amp;amp; s.val[0]>=0)
        {
            printf("Red Balln");
            num_red  ;
        }
 

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

 int count_red = 0;
int red_pot = 0;
if(s.val[2]<=255 amp;amp; s.val[2]>=230 amp;amp; s.val[1]<=40 amp;amp; s.val[1]>=0 amp;amp; s.val[0] <=40 amp;amp; 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:

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

Комментарии:

1. ах. итак, если я объявлю все, скажем, после «int main», тогда это должно сработать? Спасибо