Я не могу проверить это на нескольких веб-камерах, поскольку у меня есть только одна, но я уверен, что OpenCV2.0 должен справиться с этим. Вот несколько примеров кода (я использую Vista) с одной веб-камерой, чтобы начать работу.
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main()
{
// Start capturing on camera 0
VideoCapture cap(0);
if(!cap.isOpened()) return -1;
// This matrix will store the edges of the captured frame
Mat edges;
namedWindow("edges",1);
for(;;)
{
// Acquire the frame from cap into frame
Mat frame;
cap >> frame;
// Now, find the edges by converting to grayscale, blurring and then Canny edge detection
cvtColor(frame, edges, CV_BGR2GRAY);
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
Canny(edges, edges, 0, 30, 3);
// Display the edges and the frame
imshow("edges", edges);
imshow("frame", frame);
// Terminate by pressing a key
if(waitKey(30) >= 0) break;
}
return 0;
}
Примечание:
Ребра матрицы выделяются во время
обработка первого кадра и если
разрешение внезапно изменится,
тот же буфер будет использоваться повторно для
карта краев каждого следующего кадра.
Как видите, код довольно чистый и читаемый! Я поднял это из документации OpenCV 2.0 (opencv.pdf).
Код не только отображает изображение с веб-камеры (под frame
), но и распознает края в реальном времени! Вот скриншот, когда я направил веб-камеру на мой монитор:)
скриншот http://img245.imageshack.us/img245/5014/scrq.png
Если вы хотите, чтобы код просто отображал кадры с одной камеры:
#include <cv.h>
#include <highgui.h>
using namespace cv;
int main()
{
VideoCapture cap(0);
if(!cap.isOpened()) return -1;
for(;;)
{
Mat frame;
cap >> frame;
imshow("frame", frame);
if(waitKey(30) >= 0) break;
}
return 0;
}