Jump to content
Compvision.ru
RinOS

Работа с камерами

Recommended Posts

У тебя установлен k-lite codeck pack? С ним ставится graphstudio.exe. Попробуй через неё захватить и вывести видео. Получилось? Значит, через OpenCV тоже должно (graphstudio работает через DirectShow). Если там получается, а в OpenCV нет, то надо в отладчике смотреть как внутри производится захват.

Share this post


Link to post
Share on other sites

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

Случайно наткнулся на интересующую меня тему: “Захват видео в потоке”

http://roboforum.ru/forum51/topic9490.html

отписался автору, на данную тему, в последних топиках.

В общем, ответа не последовало. Посему, прошу Вас обсудить данную тему.

Вот собственно вопрос автора:

Здравствуйте уважаемые.

Вопрос короткий и по существу:

Имеется скажем 2, 3 или 4 камеры, необходимо работать с каждой в своем потоке.

Кто решал подобный вопрос, как реализовать многопоточность ?

Спасибо.

С уважением, Антон.

Share this post


Link to post
Share on other sites

Какой язык, какая ОС? На мой вкус, boost::thread один из самых удобных кросплатформенных вариантов для С++.

Share this post


Link to post
Share on other sites

Набросал небольшой класс для управления свойствами камеры.

Я тестировал на Logitech C905, пробовал управлять фокусом.Вроде все работает.

Документацию встроил в заголовочник.

Параметры, которыми можно управлять, если это поддерживается камерой, перечислены здесь:

MSDN

CameraControlUtils.rar

  • Like 1

Share this post


Link to post
Share on other sites

Ссылку на MSDN надо немного поправить.

Share this post


Link to post
Share on other sites

Спасибо, поправил.

Share this post


Link to post
Share on other sites

Есть такая камера. Она принимает видео через PCIe фреймграббер. К ней есть свой SDK, естественно, но хочется юзать давно знакомый оpencv. Можно ли прикрутить opencv к посторонней камере и как это сделать?

Share this post


Link to post
Share on other sites

Надо узнать, какие драйвера она использует. Если DirectShow, то можно и через OpenCV.

Share this post


Link to post
Share on other sites

Какой язык, какая ОС? На мой вкус, boost::thread один из самых удобных кросплатформенных вариантов для С++.

wxWidgets Windows/Unix, предполагается использовать wxThread.

У кого возникали проблемы со склейкой изображений с нескольких камер? Или лучше отрисовывать на компонентах?

Share this post


Link to post
Share on other sites

много потоков -накладные расходы на потоки.

все в одно изображение - накладные расходы на копирование.

что быстрее хз, без потоков легче писать код.

Share this post


Link to post
Share on other sites

что быстрее хз, без потоков легче писать код.

Ну по принципу да, всеравно многопоточность проявится как я понимаю только на многопроцессорных системах

Share this post


Link to post
Share on other sites

Есть смысл сделать два потока: поток пользовательского интерфейса и поток захвата.

Это полезно сделать и на однопроцессорной системе.

Share this post


Link to post
Share on other sites

Не нашел подобную тему, поэтому создаю.

Опишу несколько моделей с которыми я работал:

1)самая дешевая модель от a4tech, модель не помню.

Отличалась от всех другим тем, что имела встроенную ик подсветку и не имела ик фильтра. возможна съемка в темноте. цвета сильно искажаются из-за отсутствия ик фильтра.

2) Hercules Classic Link

Дешовая камера от геркулес. В свое время никак не удалось заставить ее работать с опенсв. Пробовал стандартными средствами и через библиотеку videoinput

3) Hercules Deluxe Optical Glass

Эта камера мне понравилась. Качество картинки хорошее для этого ценового уровня. При среднем освешении выдает свои 30фпс при разрешении 640*480. Ик фильтр при необходимости легко убирается. Рекомендую как дешевый вариант.

4) Microsoft LifeCam Studio

Камера с разрешением 1920*1080, качество картинки отличное. В опенсв работает нормально. Для меня основным недостатком было - сильная нагрузка на процессор даже при разрешении 640*480 - феном х6(6 ядер) грузился на 20-30 процентов при обычном выводе видео на экран из программы работы с камерой.

Порадовало наличие автофокуса, в драйвере его можно вручную настроить.

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

Опишите какие плюсы и минусы ваших камер. Интересует Logitech C910, насколько она требовательна к процессору при работе.

Планирую купить пару камер для 3д реконструкции. На какие параметры следует обратить внимание? две камеры одной модели нормально работают на одном компе?

  • Like 1

Share this post


Link to post
Share on other sites

Я беру видео с ip камер или плат захвата. Вебки как-то не прижились.

Share this post


Link to post
Share on other sites

У меня были две одинаковые вебки от sony 2001 года выпуска, и они никак не хотели вместе работать, работала только та, которую первую подключили. Так что, тут не угадаешь, какие две будут работать, а какие нет.

В итоге купил вот такую камеру:

http://roboforum.ru/forum36/topic1350-45.html#p214256

Вообще я в камерах совсем не разбираюсь, даже не знал, что в некоторых бывает ик-фильтр.

Share this post


Link to post
Share on other sites

Вообще я в камерах совсем не разбираюсь, даже не знал, что в некоторых бывает ик-фильтр.

Ик фильтр есть почти во всех камерах. его нет только в тех, которые сделаны для ночной съемки.

За ссылку спасибо.

Share this post


Link to post
Share on other sites

Подскажите пожалуйста, имеется веб-камера с максимальным разрешением в 5Мп, как используя OpenCV получить снимок с максимальным разрешением веб-камеры. Функция QueryFrame() дает снимки с разрешением видеопотока.

Share this post


Link to post
Share on other sites

Попробовал построить граф в graphstudio для своей web-камеры. Отдельный кадр большого разрешения получить не удалось. Скорее всего, OpenCV тоже не сможет.

post-391-0-86320900-1319471378_thumb.png

Share this post


Link to post
Share on other sites

Кто-нибудь знает, как получить доступ к IP-камере в OpenCV 2.3.0? Пробовал таким способом:

	CvCapture *pCapture = cvCreateFileCapture("http://192.168.1.17:80/video1.mjpg");

	if (pCapture != NULL)

	{

		int nFrameWidth = cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_WIDTH);

		int nFrameHeight = cvGetCaptureProperty(pCapture, CV_CAP_PROP_FRAME_HEIGHT);

		IplImage *pImg = cvCreateImage(cvSize(nFrameWidth, nFrameHeight), IPL_DEPTH_8U, 3);

		cvNamedWindow("cam view");

		while (true)

		{

			pImg = cvQueryFrame(pCapture);

			cvShowImage("cam view", pImg);

		}

		cvDestroyWindow("cam view");

		cvReleaseImage(&pImg);

		cvReleaseCapture(&pCapture);

	}

В окне cam view ничего не показывается, хотя под отладчиком проверял значение pImg и оно не нулевое.

Share this post


Link to post
Share on other sites

*pImg не нулевое, так как было инициализировано:

IplImage *pImg = cvCreateImage(cvSize(nFrameWidth, nFrameHeight), IPL_DEPTH_8U, 3);

что не обязательно.

Вы лучше проверьте pCapture.

Может еще проблема со слешами в адресе.

Share this post


Link to post
Share on other sites

Вы лучше проверьте pCapture.

Может еще проблема со слешами в адресе.

Я проверяю во второй сроке:

	if (pCapture != NULL)
Или нужно как-то по-другому? Кстати заметил, что вызов cvCreateFileCapture занимает очень много времени. Если подождать, то выполнение всё-таки проходит дальше. При этом в консоль выводятся сообщения типа:
[mjpeg @ 00b91800]Estimating duration from bitrate, this may be inaccurate

[mjpeg @ 00d53fc0]Estimating duration from bitrate, this may be inaccurate

Share this post


Link to post
Share on other sites

Да, if (pCapture != NULL) я пропустил.

У меня камера открывается таким адресом:

http://login:password@192.168.1.9/GetData.cgi?.mjpg
Порт там не указан, зато есть логин и пароль. Может попробовать что то типа:
http://192.168.1.9/GetData.cgi?.mjpg

Причем, если посмотреть на Ваш адрес, то там тоже есть ':', но оно отделяет адрес от порта, может он адрес логином считает? :) (Это домыслы, пробовать лень)

Share this post


Link to post
Share on other sites

В общем суть проблемы я так и не понял, но похоже, что дело не в камере. Сделал запись кадров в файл вместо вывода в окно и наконец-то увидел изображение с камеры:

	CvCapture *pCapture = cvCreateFileCapture("http://192.168.1.17:80/video1.mjpg");

	if (pCapture != NULL)

	{

		IplImage *pImg = NULL;

		int i = 0;

		char filename[20];

		while (true)

		{

			pImg = cvQueryFrame(pCapture);

			sprintf(filename, "frame%i.jpg", i++);

			cvSaveImage(filename, pImg);

		}

		cvReleaseImage(&pImg);

		cvReleaseCapture(&pCapture);

	}

Почему через cvShowImage не выводится в окно - для меня загадка.

Share this post


Link to post
Share on other sites

А для меня - нет. См. функцию cvWaitKey.

  • Like 1

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×