Перейти к содержимому
Compvision.ru

llscary

Пользователи
  • Количество публикаций

    9
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные пользователем llscary


  1. Просто надо смотреть сколько элементов в последовательности results->total. Это будет количество найденных окружностей (Вам нужно чтобы было больше нуля). Иначе Вы обращаетесь к массиву с нулем элементов.

    Большое спасибо! Помогло!


  2. Здравствуйте!

    Имееться веб-камера, которая следит за движением круга. Камера делает джпег картинки и, сравнивая центр круга на картинках, выводит сообщение в какую сторону движеться круг.

    Прога работает, но очень часто выбивает "Segmentation fault". Дебаггал через gdb - невожможно считать с p[0] и p[1]. Чуть-чуть проекспереминтивовав, случалось, когда сменить освещение круга и камеры, то прога работала нормально. Но в проге добавил ещё цикл "раскачки камеры" - тоесть сперва камера работает вхолостую, а потом сохраняем кадры.

    В чём может быть проблема - в камере или нужно сменить метод распознавания круга?

    Пробовал распознать круги простой прогой распознавания с книги, но джпеги делал стандартной Линуксовской программой Cheese - распознаються нормально, но если вручную делать джпеги с помощью OpenCV, то очень часто та же ошибка - "Segmentation fault", невожможно считать с p[0] и p[1].

    #include "cv.h"
    
    #include "highgui.h"
    
    #include <math.h>
    
    #include <stdio.h>
    
    
    
    
    
    
    int main(int argc, char** argv) 
    
    {
    
    
    	CvCapture* capture = cvCaptureFromCAM( 0 ); 		
    
    
    
    	if (capture==NULL) printf("error capturing from camera\n");
    
    
    	assert( capture );
    
    
            cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH, 352);//1280); 
    
            cvSetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT, 288);//960); 
    
    
    
    	cvWaitKey(100);
    
    
            IplImage* frame=0;
    
    
            char filename[512];
    
    
    	for (int i=0; i<30; i++)
    
    	{
    
    	frame = cvQueryFrame( capture );  // "раскачка" камеры
    
    	cvWaitKey(1);
    
    	}
    
    
    
    	float previous[3]; // array for previous circle coordinates - x,y,r
    
    	previous[0]=0;
    
    	previous[1]=0;
    
    
    
    
    for (int cycle=1; cycle<30 ;cycle++ )
    
    {
    
    
      frame = cvQueryFrame( capture );
    
    
      sprintf(filename, "Image%d.jpg", cycle);
    
      cvSaveImage(filename, frame);
    
    
      cvWaitKey(100);           
    
    
      IplImage* image = cvLoadImage(filename, CV_LOAD_IMAGE_GRAYSCALE);
    
    
      IplImage* src = cvLoadImage(filename);
    
    
      CvMemStorage* storage = cvCreateMemStorage(0);
    
    
      cvSmooth(image, image, CV_GAUSSIAN, 5, 5 );
    
    
      CvSeq* results = cvHoughCircles(image, storage, CV_HOUGH_GRADIENT, 2, image->width/10);
    
    
      float* p = (float*) cvGetSeqElem( results, 1 );
    
    
    	if ((previous[0]<p[0]) && (previous[1]<p[1]))
    
    		printf(" right --->>>  down\n");
    
    	if (previous[0]<p[0] && previous[1]>p[1])
    
    		printf(" right --->>>  up\n");
    
    	if (previous[0]>p[0] && previous[1]>p[1])
    
    		printf(" left <<<---  up\n");
    
    	if (previous[0]>p[0] && previous[1]<p[1])
    
    		printf(" left <<<---  down\n");
    
    
    	if (previous[0]==p[0] && previous[1]<p[1])
    
    		printf(" right --->>>\n");
    
    	if (previous[0]<p[0] && previous[1]==p[1])
    
    		printf(" up\n");
    
    	if (previous[0]==p[0] && previous[1]>p[1])
    
    		printf(" left <<<--- \n");
    
    	if (previous[0]>p[0] && previous[1]==p[1])
    
    		printf(" down\n");
    
    
    	if (previous[0]==p[0] && previous[1]==p[1])
    
    		printf(" stable\n");
    
    
    
    	previous[0]=p[0];
    
    	previous[1]=p[1];
    
    
     }
    
     cvReleaseCapture( &capture );
    
     return 0;
    
    }


  3. Всем привет!

    Установил OpenCV 2.0.0 для таргета ARM

    ./configure --host=arm-linux --disable-shared

    make

    make install

    Когда компилирую программу

    $TARGET-g++ -o hello_arm make.cpp `pkg-config opencv --cflags --libs`

    Выдает ошибку

    cc1plus: warning: include location "/usr/local/include/opencv" is unsafe for cross-compilation

    /home/borys/arm-2007q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.0/../../../../arm-none-linux-gnueabi/bin/ld: warning: library search path "/usr/local/lib" is unsafe for cross-compilation

    /home/borys/arm-2007q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.0/../../../../arm-none-linux-gnueabi/bin/ld: skipping incompatible /usr/local/lib/libcv.a when searching for -lcv

    /home/borys/arm-2007q1/bin/../lib/gcc/arm-none-linux-gnueabi/4.2.0/../../../../arm-none-linux-gnueabi/bin/ld: cannot find -lcv

    collect2: ld returned 1 exit status

    Проверил пути до библиотек

    pkg-config opencv --cflags --libs

    Всё в порядке

    -I/usr/local/include/opencv -L/usr/local/lib -lcv -lhighgui -lcvaux -lml -lcxcore

    В чём может быть проблема компиляции?


  4. в функции cvCaptureFromAVI вместо argv[1] подставьте название видеоролика в ковычках. Сам видеоролик бросьте в папку с экзэшником)

    Не помогает. Функция cvCaptureFromAVI возврощает NULL. Сперва думал что не тот формат ави файла, с помощью пограммы mencode перевёл в нужный ави формат, как написано на официальном сайте.


  5. Здравствуйте!

    Не могу воспоизвести видео. Вроде кодеки, что на офиц.сайте opencv все установлены. Ось - линукс.

    #include <highgui.h>
    
    
    int main( int argc, char** argv )
    
    {
    
    char stri[] = "AVI Video";
    
    cvNamedWindow( stri , CV_WINDOW_AUTOSIZE );
    
    CvCapture* capture = cvCaptureFromAVI( argv[1] );
    
    IplImage* frame;
    
    while(1)
    
    {
    
    frame = cvQueryFrame( capture );
    
    if( !frame ) break;
    
    cvShowImage( stri , frame );
    
    char c = cvWaitKey(33);
    
    if( c == 27 ) break;
    
    }
    
    cvReleaseCapture( &capture );
    
    cvDestroyWindow( stri );
    
    }

×