llscary
-
Количество публикаций
9 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем llscary
-
-
Здравствуйте!
Имееться веб-камера, которая следит за движением круга. Камера делает джпег картинки и, сравнивая центр круга на картинках, выводит сообщение в какую сторону движеться круг.
Прога работает, но очень часто выбивает "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; }
-
Решение моей проблеммы http://www.theopenrobotproject.org/tiki-index.php?page=OpenCV
Не много не по теме, ARM это под какой-то смарт ты пишешь?
что такое смарт?
-
Попробовал на другом компе, и с версией OpenCV 2.0.0. Видео работает. Так и не знаю, в чём была проблема =)
-
Всем привет!
Установил 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
В чём может быть проблема компиляции?
-
Собери программу с отладочной версией OpenCV и посмотри в отладчике в чём проблема. Кроме тебя этого никто сделать не сможет.
А как собрать программу с отладочной версией?
-
в функции cvCaptureFromAVI вместо argv[1] подставьте название видеоролика в ковычках. Сам видеоролик бросьте в папку с экзэшником)
Не помогает. Функция cvCaptureFromAVI возврощает NULL. Сперва думал что не тот формат ави файла, с помощью пограммы mencode перевёл в нужный ави формат, как написано на официальном сайте.
-
Помогите, пожалуйста!!!! А то такая банальная прога не работает!!!
-
Здравствуйте!
Не могу воспоизвести видео. Вроде кодеки, что на офиц.сайте 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 ); }
Трекинг объектов.
в OpenCV
Опубликовано · Report reply
Большое спасибо! Помогло!