Android_2012 0 Жалоба Опубликовано September 5, 2010 Попробуйте так: Capture capture = new Capture(0); OpenCV-шные программы работают у меня на всех ноутах, включая EEE-PC. Спасибо большое!!! Всё заработало!!!!! Интересно правда почему с обычной вебкой всё работало а со встроенной Capture(0) писать надо... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tybik 0 Жалоба Опубликовано 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 с камерой нет. Вот. Если не сложно опишите процесс более подробно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано September 7, 2010 Добрый всем день. Пытаюсь делать чтоб была работа Open CV c Ip камерами. Вот в инструкции которая написана в данной теме не совсем понятно как сделать 4,5 и 6 пункт. Если не сложно опишите процесс более подробно. Это всё я писал для OpenCV 1.1, которую компилировал с помощью MSVS 2005. Сейчас у меня установлена OpenCV 2.1 и MSVS 2010. Там уже другие манипуляции нужны. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tybik 0 Жалоба Опубликовано September 7, 2010 может если не сложно вы выложите свои перекомпилированные библиотеки Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано September 8, 2010 Держи: OpenCV_2.1_ffmpeg Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано September 8, 2010 Да, чуть не забыл. При захвате из файла просто вызываешь cvCaptureFromAVI, а не cvCaptureFromFile_FFMPEG. Внутри этой функции ffmpeg автоматически будет выбираться. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dasdranagon 1 Жалоба Опубликовано 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. Из каких соображений выбираются значения битрейта "по умолчанию"? Заранее спасибо! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 14, 2010 В документации написано только про фреймрейт: CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1); fps - и есть фреймрейт. Чтобы запись шла правильно (реалтайм), нужно знать с какой скоростью просчитывается видео. Это можно измерить. Можно просто рассчитать быстро, а в фреймрейте установить, значение, с которым вы хотели бы воспроизводить файл. Я обычно указываю фреймрейт своей вэбки, большой ошибки не возникает. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dasdranagon 1 Жалоба Опубликовано September 14, 2010 В документации написано только про фреймрейт: CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1); fps - и есть фреймрейт. Меня интересует именно БИТРЕЙТ, т.е. характерстика сжатия видео. Задача получить AVI как можно меньшего размера при приемлемом качестве. Причём всё должно быть автоматизировано. Можно, конечно, сформировать несжатый AVI, а затем вызывать консольный VirtualDub или mencoder, но это громоздко, занимает много времени и места на диске. Хотелось бы решить задачу поизящнеее... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано September 14, 2010 Битрейт никак не задать, просто не выведены интерфейсы. Если OpenCV скомпилирована по-умолчанию, то в качестве обёртки для компрессии и записи avi используется виндовская vfw. В этом случае выставляется: copts.dwQuality = 10000;, где copts - это AVICOMPRESSOPTIONS (см. файл ..OpenCV2.1\src\highgui\cvcap_vfw.cpp). Это значение для большинства (или для всех?) кодеков является значением битрейта. Выхода два: 1. доработать OpenCV, сделать интерфейс для задания битрейта при записи в avi - это трудный путь; 2. исправить в исходниках приведённое мной значение по-умолчанию, перекомпилировать highgui.dll и пользоваться. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tybik 0 Жалоба Опубликовано September 14, 2010 А можно ли с помощью Open CV получать какие то более человеческие имена камер нежели просто 0,1 ,2 , и тд. ? просто это не удобно в работе выбирая между 5 камерами если тебе известны тока номера. можноли получить имя камеры? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Dasdranagon 1 Жалоба Опубликовано 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. Если чего добьюсь - отпишусь. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tybik 0 Жалоба Опубликовано September 17, 2010 неужели все в программах так и пользуются номерами камер, 0,1,2...? Я думаю есть ведь какое то решение Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 17, 2010 неужели все в программах так и пользуются номерами камер, 0,1,2...? Я думаю есть ведь какое то решение Это скорее к MSDN чем к OpenCV. Перечисляйте все девайсы, отлавливайте камеры, и выводите их имена. Вот ссылка (первая на которую наткнулся): http://www.codeproject.com/KB/system/SimpleSetup.aspx Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 20, 2010 Онлайн трансляция с МКС: mms://a1709.l1856953708.c18569.g.lm.akamaistream.net/D/1709/18569/v0001/reflector:53708 Для любителей половить НЛО Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ultimatet41 0 Жалоба Опубликовано 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); в результате получаю видео файл с сильно ускоренным видео, в чём может быть проблема. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано September 29, 2010 Очевидно, что fps нельзя так просто брать и задавать значение 25. Камера захватывает с другой частотой, при записи в файл надо задавать такое же значение. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
ultimatet41 0 Жалоба Опубликовано September 29, 2010 я пробовал получать значение fps таким способом: double fps = cvGetCaptureProperty (capture, CV_CAP_PROP_FPS); однако появляется ошибка говорящая о том, что fps не может быть меньше 0. Проблема решена методом ручного подбора значения. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано September 30, 2010 Проблема решена методом ручного подбора значения. Можно сначала собрать статистику по быстродействию программы (сотня-другая первых кадров). // ставим в начале листинга double t = (double)cvGetTickCount(); // Находим, сколько времени прошло с предыдущего кадра // это вычисляется каждый цикл сбора статистики t = (double)cvGetTickCount() - t; printf("Frame time: %.2f millisec\n", t/(cvGetTickFrequency()*1000.)); // дальше усредняем // Устанавливаем fps и работаем дальше 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tybik 0 Жалоба Опубликовано October 9, 2010 для работы с камерами я нашел компонент TVideoGrabber. он работает как с usb так и с ip камерами. Жалко что платный. но работает отлично. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
L@MER 6 Жалоба Опубликовано October 16, 2010 для работы с камерами я нашел компонент TVideoGrabber. он работает как с usb так и с ip камерами. Жалко что платный. но работает отлично. Скачал TVideoGrabber с таблеткой - очень серьезная штука - делает все. Как я понял только стандартными средствами opencv делать все настройки драйвера источника - камеры, тв-карты или платы видеозахвата(разрешение, выбор источника с названием источника, яркость, контраст, гамма и все пр.) из под собственной проги нельзя. Требуется дополнительная прослойка. Из таких прослоек нашел два варианта: DSPack и TVideoGrabber. В них все это возможно. Вопрос кто-нибуть состыковывал эти компоненты с opencv (передача видеопотока или изображений из одного в другой)? Это возможно? И если возможно, то нет-ли каких примеров. Заранее благодарен! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
tybik 0 Жалоба Опубликовано October 16, 2010 Состыковать с OPenCV смотри здесь. http://www.compvision.ru/forum/index.php?s...ic=280&st=0 Я не нашел докумнтации. что нужно я взял из примеров. там все вроде просто. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
L@MER 6 Жалоба Опубликовано October 16, 2010 Состыковать с OPenCV смотри здесь. http://www.compvision.ru/forum/index.php?s...ic=280&st=0 Я не нашел докумнтации. что нужно я взял из примеров. там все вроде просто. Спасибо, я так понял это касается как TVideoGrabber, так и DSPack? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mousem 0 Жалоба Опубликовано December 13, 2010 Здравствуйте! Не подскажите какую нибудб Online IP камеру, чтобы протестить собранную библиотеку opencv???? что то типа http://129.89.28.32/axis-cgi/mjpg/video.cgi?resolution=480X360.mjpg, но только работающее)) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mousem 0 Жалоба Опубликовано December 14, 2010 Здравствуйте! Не подскажите какую нибудь Online IP камеру, чтобы протестить собранную библиотеку opencv???? что то типа http://129.89.28.32/...on=480X360.mjpg, но только работающее)) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах