Volodka 0 Жалоба Опубликовано November 29, 2010 Все привет. Собственно вопрос, именно так и звучит, возможна ли в openCV работа с двумя веб-камерами подключенными к одному компьютеру?) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано November 29, 2010 Можно так (если драйверы могут работать вместе, попробуйте открыть камеры одновременно (в любой программе) ,чтобы видеозахват шел одновременно с двух камер, если получится, то есть надежда): 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] Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Volodka 0 Жалоба Опубликовано November 29, 2010 Спасибо. Просто мне желательно знать точно, возможно ли это, пишу самостоятельную работу, до программирования еще далеко, надо бы структурную схему сделать, и в ней очень важно, буду я использовать две камеры или же одну. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
XoXol_89 3 Жалоба Опубликовано December 1, 2010 Странно..но не работает) камеры работают одновременно в разных программах.. а в OpenCV одна камера норм, а вторая..зеленый экран.. Есть у кого нибудь предположения?)) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
executor 5 Жалоба Опубликовано December 4, 2010 Странно..но не работает) камеры работают одновременно в разных программах.. а в 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); или растолкать камеру (считать размер кадра, получить пару кадров, задержка, записать новый размер кадра, задержка, получить пару кадров). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
XoXol_89 3 Жалоба Опубликовано December 4, 2010 Спасибо) Все оказалось на самом деле проще..надо было все снести и поставить заново) Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
mousem 0 Жалоба Опубликовано December 15, 2010 Здравствуйте уважаемые форумчане! Поделитесь пожалуйста собранной библиотекой по захвату IP камеры! или проектом! Очень Вас прошу. Тема актуальная, пересобирать библиотеки я не умею ( пытался не раз). Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pianist 0 Жалоба Опубликовано December 16, 2010 Всем привет!!! столкнулся вот с такой проблемой, подключил обычную Веб камеру, написал найпростейшу програмку сохранения фотографии в файл.. Только вот фотка получается 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); } Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано December 17, 2010 А камера поддерживает 640х480 ? Если да, то скорее всего надо смотреть настройки драйвера. Если нет, то поставьте разрешение которое камера может потянуть. Если хотите просто растянуть, то cvResize. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Pianist 0 Жалоба Опубликовано December 17, 2010 А камера поддерживает 640х480 ? Если да, то скорее всего надо смотреть настройки драйвера. Если нет, то поставьте разрешение которое камера может потянуть. Если хотите просто растянуть, то cvResize. Kemera Logitech.... I 640x480 podderzuvaet! Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Fresh 0 Жалоба Опубликовано February 16, 2011 Здравствуйте. Подскажите, какие интерфейсы камер поддерживает opencv? usb, ethernet как подключить ip-камеру? если возможно. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Nuzhny 243 Жалоба Опубликовано February 16, 2011 usb Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
вф1 0 Жалоба Опубликовано March 2, 2011 Кто-нибудь пробовал работать с библиотекой и платой PCI-Exp IEE1394? Лично у меня демо-программы например не увидели ни такую плату, ни соответственно камеру (несмотря на конкретное указание IEE1394, а не 0 (т.е. все камеры просматривать)) Заранее спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виталий 6 Жалоба Опубликовано March 3, 2011 Удается ли получить картинку с камеры с помощью обычных программ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
вф1 0 Жалоба Опубликовано March 3, 2011 Удается ли получить картинку с камеры с помощью обычных программ? С помощью той программы что шла в комплекте с камерой-разумеется, удается. Какие программы посоветуете для тестирования? заранее спасибо Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
RinOS 16 Жалоба Опубликовано March 4, 2011 Здесь обсуждалось: http://www.compvision.ru/forum/index.php?showtopic=194 еще что то было на форуме. если поискать можно найти... Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виталий 6 Жалоба Опубликовано March 10, 2011 Купил сегодня новую камеру - 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. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
executor 5 Жалоба Опубликовано March 11, 2011 При чтении 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; Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
noonv 3 Жалоба Опубликовано March 11, 2011 попробуйте работать с камерой через библиотеку videoInput 1 Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виталий 6 Жалоба Опубликовано March 11, 2011 Попробуйте переустанавливать размер кадра после снятия первого кадра: 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 использовать Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виталий 6 Жалоба Опубликовано March 11, 2011 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 ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виталий 6 Жалоба Опубликовано March 11, 2011 С потреблением ресурсов вопрос снимется - это ест драйвер камеры. Есть ли где-то полный список функций videoinput ? Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Smorodov 579 Жалоба Опубликовано March 12, 2011 Есть, в заголовочном файле. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Виталий 6 Жалоба Опубликовано March 15, 2011 у меня подобная проблема была. работал в версии опенсв 1.0. В версии 2.1 данная проблема решилась и разрешение стало нормально устанавливаться. Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Дима 0 Жалоба Опубликовано April 6, 2011 Доброго времени суток. Проблема такая, есть программа, в ней с помощью библиотеки 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 и является встроенной в ноутбук Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах