Android_2012 0 Report post Posted September 5, 2010 Попробуйте так: Capture capture = new Capture(0); OpenCV-шные программы работают у меня на всех ноутах, включая EEE-PC. Спасибо большое!!! Всё заработало!!!!! Интересно правда почему с обычной вебкой всё работало а со встроенной Capture(0) писать надо... Share this post Link to post Share on other sites
tybik 0 Report post Posted September 7, 2010 Добрый всем день. Пытаюсь делать чтоб была работа Open CV c Ip камерами. Вот в инструкции которая написана в данной теме не совсем понятно как сделать 4,5 и 6 пункт. 1. Скачал ffmpeg. 2. Поправил в ffopencv.cpp подключаемые либы на те, которые есть в скачанной ffmpeg. 3. В cvcap_ffmpeg.cpp исправил название функции с cvCreateFileCapture_FFMPEG на cvCaptureFromFile_FFMPEG. 4. В свойствах проекта ffopencv -> C|C++ -> Preprocessor -> Preprocessor Definitions добавил HAVE_FFMPEG и HAVE_FFMPEG_SWSCALE 5. Скомпилировал ffopencv 6. Перекомпилировал проект highgui 7. В своём проекте добавил инклуды ffopencv.h и _highgui.h, а также ffopencv.lib 8. Вызываю CvCapture *capture = cvCaptureFromFile_FFMPEG("c:\\video\\The Big Bang Theory (Season 3)\\the.big.bang.theory.s03e06.720p.hdtv.x264-ctu.mkv"); - проигрывается! 9. Все твои url с камерой нет. Вот. Если не сложно опишите процесс более подробно. Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 7, 2010 Добрый всем день. Пытаюсь делать чтоб была работа Open CV c Ip камерами. Вот в инструкции которая написана в данной теме не совсем понятно как сделать 4,5 и 6 пункт. Если не сложно опишите процесс более подробно. Это всё я писал для OpenCV 1.1, которую компилировал с помощью MSVS 2005. Сейчас у меня установлена OpenCV 2.1 и MSVS 2010. Там уже другие манипуляции нужны. Share this post Link to post Share on other sites
tybik 0 Report post Posted September 7, 2010 может если не сложно вы выложите свои перекомпилированные библиотеки Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 8, 2010 Держи: OpenCV_2.1_ffmpeg Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 8, 2010 Да, чуть не забыл. При захвате из файла просто вызываешь cvCaptureFromAVI, а не cvCaptureFromFile_FFMPEG. Внутри этой функции ffmpeg автоматически будет выбираться. Share this post Link to post Share on other sites
Dasdranagon 1 Report post Posted September 14, 2010 Привет всем. OpenCV поддерживает некоторые кодеки для записи AVI: 1 - CV_FOURCC('P','I','M','1') = MPEG-1 codec 2 - CV_FOURCC('M','J','P','G') = motion-jpeg codec 3 - CV_FOURCC('M', 'P', '4', '2') = MPEG-4.2 codec 4 - CV_FOURCC('D', 'I', 'V', '3') = MPEG-4.3 codec 5 - CV_FOURCC('D', 'I', 'V', 'X') = MPEG-4 codec 6 - CV_FOURCC('U', '2', '6', '3') = H263 codec 7 - CV_FOURCC('I', '2', '6', '3') = H263I codec 8 - CV_FOURCC('F', 'L', 'V', '1') = FLV1 codec Вопрос: Можно ли как-нибудь управлять битрейтом? Это касается, в частности, кодеков 3, 4 и 5. Из каких соображений выбираются значения битрейта "по умолчанию"? Заранее спасибо! Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 14, 2010 В документации написано только про фреймрейт: CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1); fps - и есть фреймрейт. Чтобы запись шла правильно (реалтайм), нужно знать с какой скоростью просчитывается видео. Это можно измерить. Можно просто рассчитать быстро, а в фреймрейте установить, значение, с которым вы хотели бы воспроизводить файл. Я обычно указываю фреймрейт своей вэбки, большой ошибки не возникает. Share this post Link to post Share on other sites
Dasdranagon 1 Report post Posted September 14, 2010 В документации написано только про фреймрейт: CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1); fps - и есть фреймрейт. Меня интересует именно БИТРЕЙТ, т.е. характерстика сжатия видео. Задача получить AVI как можно меньшего размера при приемлемом качестве. Причём всё должно быть автоматизировано. Можно, конечно, сформировать несжатый AVI, а затем вызывать консольный VirtualDub или mencoder, но это громоздко, занимает много времени и места на диске. Хотелось бы решить задачу поизящнеее... Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 14, 2010 Битрейт никак не задать, просто не выведены интерфейсы. Если OpenCV скомпилирована по-умолчанию, то в качестве обёртки для компрессии и записи avi используется виндовская vfw. В этом случае выставляется: copts.dwQuality = 10000;, где copts - это AVICOMPRESSOPTIONS (см. файл ..OpenCV2.1\src\highgui\cvcap_vfw.cpp). Это значение для большинства (или для всех?) кодеков является значением битрейта. Выхода два: 1. доработать OpenCV, сделать интерфейс для задания битрейта при записи в avi - это трудный путь; 2. исправить в исходниках приведённое мной значение по-умолчанию, перекомпилировать highgui.dll и пользоваться. Share this post Link to post Share on other sites
tybik 0 Report post Posted September 14, 2010 А можно ли с помощью Open CV получать какие то более человеческие имена камер нежели просто 0,1 ,2 , и тд. ? просто это не удобно в работе выбирая между 5 камерами если тебе известны тока номера. можноли получить имя камеры? Share this post Link to post Share on other sites
Dasdranagon 1 Report post Posted September 14, 2010 Битрейт никак не задать, просто не выведены интерфейсы. Если OpenCV скомпилирована по-умолчанию, то в качестве обёртки для компрессии и записи avi используется виндовская vfw. В этом случае выставляется: copts.dwQuality = 10000;, где copts - это AVICOMPRESSOPTIONS (см. файл ..OpenCV2.1\src\highgui\cvcap_vfw.cpp). Это значение для большинства (или для всех?) кодеков является значением битрейта. Выхода два: 1. доработать OpenCV, сделать интерфейс для задания битрейта при записи в avi - это трудный путь; 2. исправить в исходниках приведённое мной значение по-умолчанию, перекомпилировать highgui.dll и пользоваться. Спасибо! Буду копать идею № 2. Если чего добьюсь - отпишусь. Share this post Link to post Share on other sites
tybik 0 Report post Posted September 17, 2010 неужели все в программах так и пользуются номерами камер, 0,1,2...? Я думаю есть ведь какое то решение Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 17, 2010 неужели все в программах так и пользуются номерами камер, 0,1,2...? Я думаю есть ведь какое то решение Это скорее к MSDN чем к OpenCV. Перечисляйте все девайсы, отлавливайте камеры, и выводите их имена. Вот ссылка (первая на которую наткнулся): http://www.codeproject.com/KB/system/SimpleSetup.aspx Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 20, 2010 Онлайн трансляция с МКС: mms://a1709.l1856953708.c18569.g.lm.akamaistream.net/D/1709/18569/v0001/reflector:53708 Для любителей половить НЛО Share this post Link to post Share on other sites
ultimatet41 0 Report post Posted September 28, 2010 Помогите пожалуйста разобраться, записываю поток в файл следующим алгоритмом в ос Linux (Ubuntu) CvCapture *capture = cvCreateCameraCapture(0); assert(capture!=0); const char *filename = "capture.avi"; double fps = 25; CvSize size = cvSize( (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH), (int)cvGetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT)); CvVideoWriter *writer = cvCreateVideoWriter(filename, CV_FOURCC('X','V','I','D'), fps, size, 1); assert(writer!=0); IplImage *frame=0; while(true){ frame = cvQueryFrame( capture ); cvWriteFrame(writer, frame); char c = cvWaitKey(1); if (c == 27) { break; } } cvReleaseImage(&frame); cvReleaseCapture( &capture ); cvReleaseVideoWriter(&writer); в результате получаю видео файл с сильно ускоренным видео, в чём может быть проблема. Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 29, 2010 Очевидно, что fps нельзя так просто брать и задавать значение 25. Камера захватывает с другой частотой, при записи в файл надо задавать такое же значение. Share this post Link to post Share on other sites
ultimatet41 0 Report post Posted September 29, 2010 я пробовал получать значение fps таким способом: double fps = cvGetCaptureProperty (capture, CV_CAP_PROP_FPS); однако появляется ошибка говорящая о том, что fps не может быть меньше 0. Проблема решена методом ручного подбора значения. Share this post Link to post Share on other sites
Smorodov 578 Report post Posted September 30, 2010 Проблема решена методом ручного подбора значения. Можно сначала собрать статистику по быстродействию программы (сотня-другая первых кадров). // ставим в начале листинга double t = (double)cvGetTickCount(); // Находим, сколько времени прошло с предыдущего кадра // это вычисляется каждый цикл сбора статистики t = (double)cvGetTickCount() - t; printf("Frame time: %.2f millisec\n", t/(cvGetTickFrequency()*1000.)); // дальше усредняем // Устанавливаем fps и работаем дальше 1 Share this post Link to post Share on other sites
tybik 0 Report post Posted October 9, 2010 для работы с камерами я нашел компонент TVideoGrabber. он работает как с usb так и с ip камерами. Жалко что платный. но работает отлично. Share this post Link to post Share on other sites
L@MER 6 Report post Posted October 16, 2010 для работы с камерами я нашел компонент TVideoGrabber. он работает как с usb так и с ip камерами. Жалко что платный. но работает отлично. Скачал TVideoGrabber с таблеткой - очень серьезная штука - делает все. Как я понял только стандартными средствами opencv делать все настройки драйвера источника - камеры, тв-карты или платы видеозахвата(разрешение, выбор источника с названием источника, яркость, контраст, гамма и все пр.) из под собственной проги нельзя. Требуется дополнительная прослойка. Из таких прослоек нашел два варианта: DSPack и TVideoGrabber. В них все это возможно. Вопрос кто-нибуть состыковывал эти компоненты с opencv (передача видеопотока или изображений из одного в другой)? Это возможно? И если возможно, то нет-ли каких примеров. Заранее благодарен! Share this post Link to post Share on other sites
tybik 0 Report post Posted October 16, 2010 Состыковать с OPenCV смотри здесь. http://www.compvision.ru/forum/index.php?s...ic=280&st=0 Я не нашел докумнтации. что нужно я взял из примеров. там все вроде просто. Share this post Link to post Share on other sites
L@MER 6 Report post Posted October 16, 2010 Состыковать с OPenCV смотри здесь. http://www.compvision.ru/forum/index.php?s...ic=280&st=0 Я не нашел докумнтации. что нужно я взял из примеров. там все вроде просто. Спасибо, я так понял это касается как TVideoGrabber, так и DSPack? Share this post Link to post Share on other sites
mousem 0 Report post Posted December 13, 2010 Здравствуйте! Не подскажите какую нибудб Online IP камеру, чтобы протестить собранную библиотеку opencv???? что то типа http://129.89.28.32/axis-cgi/mjpg/video.cgi?resolution=480X360.mjpg, но только работающее)) Share this post Link to post Share on other sites
mousem 0 Report post Posted December 14, 2010 Здравствуйте! Не подскажите какую нибудь Online IP камеру, чтобы протестить собранную библиотеку opencv???? что то типа http://129.89.28.32/...on=480X360.mjpg, но только работающее)) Share this post Link to post Share on other sites