Перейти к содержимому
Compvision.ru
Volodka

Работа с несколькими веб камерами

Recommended Posts

Все привет. Собственно вопрос, именно так и звучит, возможна ли в openCV работа с двумя веб-камерами подключенными к одному компьютеру?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Можно так (если драйверы могут работать вместе, попробуйте открыть камеры одновременно (в любой программе) ,чтобы видеозахват шел одновременно с двух камер, если получится, то есть надежда):

CvCapture* CaptureLeft = NULL;
CvCapture* CaptureRight = NULL;

LeftNewImage = cvCreateImage(cvSize(Width,Height), IPL_DEPTH_8U, 3);
RightNewImage = cvCreateImage(cvSize(Width,Height), IPL_DEPTH_8U, 3);

while(CaptureLeft == NULL) CaptureLeft = cvCaptureFromCAM(-1); // Ищем камеру
while(CaptureRight == NULL) CaptureRight = cvCaptureFromCAM(-1); // Ищем камеру

cvNamedWindow("Left", CV_WINDOW_AUTOSIZE);
cvNamedWindow("Right", CV_WINDOW_AUTOSIZE);
// Захват в буфер
cvGrabFrame(CaptureLeft);
cvGrabFrame(CaptureRight);

// вытаскиваем из буфера
LeftNewImage = cvRetrieveFrame(CaptureLeft);
RightNewImage = cvRetrieveFrame(CaptureRight);

cvShowImage("Left", LeftNewImage);
cvShowImage("Right", RightNewImage);[/code]

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо. Просто мне желательно знать точно, возможно ли это, пишу самостоятельную работу, до программирования еще далеко, надо бы структурную схему сделать, и в ней очень важно, буду я использовать две камеры или же одну.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно..но не работает) камеры работают одновременно в разных программах.. а в OpenCV одна камера норм, а вторая..зеленый экран..

Есть у кого нибудь предположения?))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Странно..но не работает) камеры работают одновременно в разных программах.. а в OpenCV одна камера норм, а вторая..зеленый экран..

Есть у кого нибудь предположения?))

Попробуйте принудительно ставить индексы камерам:


CvCapture *CaptureLeft = cvCaptureFromCAM(0);

Sleep(1000); // cvWaitKey(1000);

CvCapture *CaptureRight = cvCaptureFromCAM(1); // и так далее

Зеленого экрана быть не должно. Поищите, может какой-то баг в программе другой? У меня Philips spc2050nc две камеры. Они иногда не хотят вместе работать, приходится компьютер перезагружать, и камеры в нужном порядке вставлять в USB с задержкой в пару секунд. Попробуйте проверить не нулевость CvCapture* для второй камеры, получить размер изображения второй камеры:

int width2 = (int)cvGetCaptureProperty(CaptureRight,CV_CAP_PROP_FRAME_WIDTH);

int height2 = (int)cvGetCaptureProperty(CaptureRight,CV_CAP_PROP_FRAME_HEIGHT);

или растолкать камеру (считать размер кадра, получить пару кадров, задержка, записать новый размер кадра, задержка, получить пару кадров).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо) Все оказалось на самом деле проще..надо было все снести и поставить заново)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте уважаемые форумчане!

Поделитесь пожалуйста собранной библиотекой по захвату IP камеры! или проектом! Очень Вас прошу. Тема актуальная, пересобирать библиотеки я не умею ( пытался не раз).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем привет!!! столкнулся вот с такой проблемой, подключил обычную Веб камеру, написал найпростейшу програмку сохранения фотографии в файл.. Только вот фотка получается c таким разрешение 176Х144. Пробовал функцию которая должна отвечать за изменения разрешения но ничего не помогло.... ПРошу о помощи, или хотя-бы куда рыть???? (всю эту "кухню" кручу на Линуксе)


#include <cv.h>

#include <highgui.h>

#include <stdio.h>


    int main(int argc, char* argv[])

         {

        CvCapture *capture = cvCreateCameraCapture(0);

          if(capture == NULL) 

          {printf ("No camera\n");

                return 0; }

        cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_WIDTH, 640 );

        cvSetCaptureProperty( capture, CV_CAP_PROP_FRAME_HEIGHT, 480 );


     IplImage *frame = NULL; // Кадр

     char filename[512];


    frame = cvQueryFrame(capture);

    sprintf(filename, "/home/www/1.bmp");

     printf("[i] capture... %s\n", filename);

    cvSaveImage(filename, frame);


    cvReleaseCapture(&capture);

     }

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А камера поддерживает 640х480 ?

Если да, то скорее всего надо смотреть настройки драйвера.

Если нет, то поставьте разрешение которое камера может потянуть.

Если хотите просто растянуть, то cvResize.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А камера поддерживает 640х480 ?

Если да, то скорее всего надо смотреть настройки драйвера.

Если нет, то поставьте разрешение которое камера может потянуть.

Если хотите просто растянуть, то cvResize.

Kemera Logitech.... I 640x480 podderzuvaet!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Здравствуйте. Подскажите, какие интерфейсы камер поддерживает opencv? usb, ethernet

как подключить ip-камеру? если возможно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Кто-нибудь пробовал работать с библиотекой и платой PCI-Exp IEE1394? Лично у меня демо-программы например не увидели ни такую плату, ни соответственно камеру (несмотря на конкретное указание IEE1394, а не 0 (т.е. все камеры просматривать))

Заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Удается ли получить картинку с камеры с помощью обычных программ?

С помощью той программы что шла в комплекте с камерой-разумеется, удается.

Какие программы посоветуете для тестирования?

заранее спасибо

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Купил сегодня новую камеру - microsoft lifecam studio.

Работает в opencv нормально при разрешениях до 800*600 включительно.

Установка большего разрешения не происходит: cvSetCaptureProperty(capture1, CV_CAP_PROP_FRAME_WIDTH, 1920);

При чтении cvGetCaptureProperty(capture1, CV_CAP_PROP_FRAME_WIDTH); функция возвращает 640, то есть разрешение по умолчанию.

Программы захвата видео нормально работают в разрешении 1920*1080.

Собственно вопрос - как можно в opencv захватывать видео с этой камеры?

версия opencv - 2.1, компилятор - visual studio 2008.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При чтении cvGetCaptureProperty(capture1, CV_CAP_PROP_FRAME_WIDTH); функция возвращает 640, то есть разрешение по умолчанию.

Попробуйте переустанавливать размер кадра после снятия первого кадра:


CvCapture *cam = cvCreateCameraCapture(0);

if (!cam) return 0;

if (!cvQueryFrame(cam)) return 0; // снимаем первый кадр


// lifecap studio = 1080p = 1920 x 1080

int desiredW = 1920;

int desiredH = 1080;

cvSetCaptureProperty(cam,CV_CAP_PROP_FRAME_WIDTH,desiredW);

cvSetCaptureProperty(cam,CV_CAP_PROP_FRAME_HEIGHT,desiredH);


if (!cvQueryFrame(cam)) return 0; // кадр после переустановки


int retw = (int)cvGetCaptureProperty(cam,CV_CAP_PROP_FRAME_WIDTH);

int reth = (int)cvGetCaptureProperty(cam,CV_CAP_PROP_FRAME_HEIGHT);


if (!cvQueryFrame(cam)) return 0; // проверяем снова

if (retw != desiredW || reth != desiredH) return 0;

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

попробуйте работать с камерой через библиотеку videoInput

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Попробуйте переустанавливать размер кадра после снятия первого кадра:


CvCapture *cam = cvCreateCameraCapture(0);

if (!cam) return 0;

if (!cvQueryFrame(cam)) return 0; // снимаем первый кадр


// lifecap studio = 1080p = 1920 x 1080

int desiredW = 1920;

int desiredH = 1080;

cvSetCaptureProperty(cam,CV_CAP_PROP_FRAME_WIDTH,desiredW);

cvSetCaptureProperty(cam,CV_CAP_PROP_FRAME_HEIGHT,desiredH);


if (!cvQueryFrame(cam)) return 0; // кадр после переустановки


int retw = (int)cvGetCaptureProperty(cam,CV_CAP_PROP_FRAME_WIDTH);

int reth = (int)cvGetCaptureProperty(cam,CV_CAP_PROP_FRAME_HEIGHT);


if (!cvQueryFrame(cam)) return 0; // проверяем снова

if (retw != desiredW || reth != desiredH) return 0;

попробовал захватить несколько кадров перед установкой разрешения. В итоге ничего не получилось. К тому же упал fps с 30 до 15. (((

буду пробовать videoinput использовать

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Videoinput смогла использовать 1920*1080 разрешение. Спасибо.

Вот код:

videoInput VI;

int device1=0;

VI.setIdealFramerate(device1, 30);

VI.setupDevice(device1, 640, 480, VI_COMPOSITE);

image = cvCreateImage(cvSize(VI.getWidth(device1),VI.getHeight(device1)), IPL_DEPTH_8U, 3);

cvNamedWindow("capture", CV_WINDOW_AUTOSIZE);

//VI.showSettingsWindow(0);

while(1){

t = (double)cvGetTickCount()-t; //измеряем fps

fps=cvGetTickFrequency()/t*1000000;

tfps[framenumber%10]=fps;

afps = ( tfps[0]+tfps[1]+tfps[2]+tfps[3]+tfps[4]+tfps[5]+tfps[6]+tfps[7]+tfps[8]+tfps[9] )/10;

printf("frame number=%i %.1f fps %.1f average fps \n ",framenumber,fps,afps );

framenumber++;

t = (double)cvGetTickCount();

char c=cvWaitKey(1);

if(c==27) break;

if ( VI.isFrameNew(device1) ){

VI.getPixels(device1, (unsigned char *)image->imageData, false, true); // получение пикселей в BGR

cvShowImage("capture", image);

}

}

Fps не совсем корректно работает. более низкие значения ставятся другими. при таком коде значение равно 65. если заменить VI.isFrameNew(device1) на 1, то получаем нужные 30 кадров в секунду.

Также меня смущает сильное потребление ресурсов. при разрешении 640*480 в среднем полностью загружено одно ядро. При стандартных способах захвата ресурсов нужно гораздо меньше.

Есть ли где-то полный список функций videoinput ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

С потреблением ресурсов вопрос снимется - это ест драйвер камеры.

Есть ли где-то полный список функций videoinput ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Есть, в заголовочном файле.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у меня подобная проблема была. работал в версии опенсв 1.0. В версии 2.1 данная проблема решилась и разрешение стало нормально устанавливаться.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Доброго времени суток. Проблема такая, есть программа, в ней с помощью библиотеки inputVideo снимаю изображение. И при помощи OpenCV вывожу его на форму. Только видео снимается максимум с FPS 15-16 иногда показатель подпрыгивает до 30, но это скорей локальные всплески.

Изображение снимаю со следующими настройками камеры

// частота кадров

VI.setIdealFramerate(device, 60);

// указываем разрешение

VI.setupDevice(device, 320, 240, VI_USB); или VI.setupDevice(device, 640, 480, VI_USB);

VI.setFormat(device, VI_NTSC_M);

что делать?

Камера идентифицируется как USB 2.0 Camera и является встроенной в ноутбук

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×