-
Количество публикаций
1 427 -
Зарегистрирован
-
Посещение
-
Days Won
176
Сообщения, опубликованные пользователем Nuzhny
-
-
Надо зайти в cxerror.h, переопределить макрос CV_ERROR. Вместо:
#define CV_ERROR( Code, Msg ) \
{ \
cvError( (Code), cvFuncName, Msg, __FILE__, __LINE__ ); \
EXIT; \
}
Сделай:
#define CV_ERROR( Code, Msg )
И перекомпилируй все dll из OpenCV.
-
OpenCV 1.0 не поддерживает работу с несколькими камерами - сами разработчики на конференции Graphicon 2007 об этом говорили.
Попробуй более новую версию библиотеки, возможно, что всё изменилось к лучшему.
-
Всё работает на MSVC 2005. Выкладывай своё изображение.
-
Вроде как OpenCV работает с камерой через DirectShow. Можно попробовать посмотреть изображение с камеры через graphedit и поиграть с настройками. Если получится получить нормальный видеопоток, то разбираться с OpenCV, иначе проблему следует искать в драйверах.
-
Именно этой не пробовал. Однако недавно перенёс на CUDA свой детектор движения. На разрешении 720х576 работать стал быстрей раза в 4. Причём больше половины времени занимает конвертация кадра из RGB в RGBX и копирование его в видеопамять. То есть сама обработка ускорилась в 8 раз. Пока меня это устраивает, но в будущем, возможно, попробую разобраться и с этим.
Плюс ко всему можно распаковку видео также перенести на видеокарту (в SDK пример есть), тогда процессор освободится ещё больше, а также не придётся копировать распакованный кадр в видеопамять.
-
Если процессор хотя бы двухъядерный, то можно сделать 2 потока.
Вариант 1.
Первый поток выполняет только захват видео и копирует каждый кадр во второй поток, в котором будет производиться обработка.
Во втором потоке должна быть выделена память на два кадра: в один копируется кадр из первого потока, второй обрабатывается. После обработки, указатели на кадры меняются местами. Копирование кадра и смену указателей необходимо защитить критической секцией.
Вариант 2.
Сделать очередь, в которую первый поток будет складывать захваченные кадры. Второй поток, соответственно, будет из неё читать и обрабатывать. Если размер очереди будет превышать некоторые разумные пределы (скажем 150 кадров), то выбрасывать кадры из очереди, но не подряд, а равномерно. Таким образом, пропадание кадров не приведёт к "дёрганию" картинки.
Вариант 1 проще, его в принципе должно хватить. Вариант 2 применяется чаще всего при захвате видео из сети с низкой пропускной способностью, чтобы уменьшить эффект её латентности.
-
У меня вывод с веб-камеры не замедленный - как раз такой как и в експлорере. Может у тебя процессор слабый или камера больше не позволяет, например из-за большого разрешения.
-
Ну, лица ищутся bosting'ом. Пример работает так себе.
-
Самое простое - набрать в гугле plate recognition. Или походить по ссылкам в Википедии.Вообщем задача в следующем: необходимо в видеопотоке выделить автомобиль, пластину с автомобильным номером, сохранить эту пластину
Ну так выкладывай свои алгоритмы, поможем реализовать.Но у меня загвоздка в том что необходимо реализовать свои алгоритмы детектирования... То есть не использовать то, что реализовано в OpenCV... -
По идее можно, я не пробовал. Просто большинство программ таскают сам vcredist_x86.exe и предлагают его установить при инсталляции. У меня такие проблемы не стоят.
-
Лицензия свободная, тут засад нет.
-
OpenCV dll'ки нуждаются в C++ библиотеках. Обычно с такой программой распространяют vcredist_x86.exe. Обычно устанавливается со студией.
-
Скорее всего так и есть, а может у меня дома интернет-канал слишком узкий. На работе запустил из командной строки ffplay.exe "http://webcam.oii.ox.ac.uk/mjpg/video.mjpg" - показывает. ffplay.exe скачал с того же сайта, той же версии, которую подключал к OpenCV. Все исходники остались дома - попробовать на работе свой вариант смогу только в понедельник.Возможно что то не так сделал... или у автора статьи OpenCV и IP Axis, по другому сделано. -
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 с камерой нет.
Вот.
-
Вот сдесь: http://www.rainsoft.de/projects/ffmpeg_opencv.html пишут как включить поддержку FFMPEG в OpenCV, но под линукс(Угу. В папке otherlibs есть проект ffopencv, который и выдаёт необходимую ffopencv110.dll, в которой и есть интересующая функция cvCaptureFromFile_FFMPEG. Только для успешной компиляции надо скачать исходники ffmpeg, скомпилировать и получить либы: libavformat.a, libavcodec.a, libavutil.a, libgcc.a, libmingwex.a. Это линуксовые аналоги lib-файлов. Однако макросы _MSC_VER в ffopencv.cpp дают надежду на компиляцию под Виндой.
Мне, если честно, неохота возиться с этим делом. Если будешь пробовать - расскажи о результатах.
-
О, до ошибки линкера ты уже дошёл! В OpenCV 2.0 уже есть libopencv_ffmpeg200.dll.Линкер начал писать [Linker Error] Error: Unresolved external 'cvCreateFileCapture_FFMPEG(const char *)' referenced from C:\URL CAM\UNIT1.OBJ -
Кто ни будь пытался работать с IP камерами на С++?В OpenCV 1.1 есть cvCreateFileCapture_FFMPEG в _highgui.h, но он там закомментирован. Надо раскомментировать, перекомпилилировать highgui.dll. Посмотреть на ошибки линкера и попробовать с ними разобраться. У меня пока нет времени на это, может быть вечером.
-
Наверняка можно и другой студией откомпилировать. У меня ещё стоит бета2 2010-й, могу попробовать. Но лучше тебе самому изучить тонкости компилирования и линковки (если, конечно, ты будешь работать С++ программистом).
P.S. Посмотрел внимательней, у тебя ещё и cv.lib с cv110.dll лишние.
-
Может быть что-то лишнее?Да, из них надо подключить только 3: cv.lib, cxcore.lib, highgui.lib. И, соответственно, брать с собой 3 dll: cv110.dll, cxcore110.dll, highgui110.dll.
Твой код скомпилировал, вот здесь. В папке release лежит готовый exe и необходимые к нему 3 dll.
-
-
2005-ю студию использую. И ошибки какие-то странные у тебя. Если хочешь могу скинуть скомпилированные lib и dll, которые не тербую ничего лишнего.
-
Всё нормально. Посмотри в свойствах проекта, свойства linker'а, раздел Input. Если найдёшь там где-нибудь LIBCMT, то удали.
-
Я наверное безнадежен=)Проделал все что вы сказали. Для каждого проекта сделал полную перекомпеляцию, но вот когда начинаю компелировать свой проект с опцией "Multi threaded", он мне выдает ошибку связанную с LINK. Что мы сделали поменяв настройку "Multi threaded"? Теперь к проекту нужно подключить dll?
Нет, ничего подключать не нужно. Наоборот, все необходимые dll прилинкованы в виде статических библиотек (lib-файлов). Если бы ты назвал имя ошибки(ок), было бы проще тебе ответить. Unresolved external? Или, наоборот, always defined? В первом случае, надо добавить необходимые lib, во втором посмотреть в свойства линкера, вдруг в ignored input library указаны необходимые тебе библиотеки.
Вообще, сборка больших С++ проектов довольно сложная задача из-за своей громоздкости (есть даже специальность - инженер по сборкам). Но процесс логичен и детерменирован, разрулить можно всегда. Ошибки в студию!
-
Мда...) в одной функции memstorage был объявлен как статикЕсть один рабочий, но немного извращенческий способ решения проблемы. Допустим, у тебя есть dll, которая не предназначена для многопоточного использования.
1. Поставляешь с программой эту xxx.dll.
2. Для каждого своего i-го потока создаёшь физическую копию этой длл: xxx_i.dll. Подключаешь её в этом потоке динамически (LoadLibrary и т.д), статическая линковка не подходит.
3. Поток завершается, делается FreeLibrrary и xxx_i.dll удаляется с диска.
По большому счёту ничего сложного, если нет желания править исходники библиотеки (или они могут быть недоступны), то такой подход вполне оправдан.
Отключить вывод ошибок
в OpenCV
Опубликовано · Report reply
Тут я ошибся, разумеется, надо менять на:
По поводу cvd.lib, cxcored.lib - компилируй в Release.