开发者

Capture a picture from multiple webcams, using C++

I need a program to capture pictures from multiple webcams and save them automatically in Windows Vista. I got the basic code from this link. The code runs in Window XP, but when I tried开发者_Go百科 using it on Vista it says "failed." Different errors pop up every time it is executed. Would it help if I used the SDK platform? Does anyone have any suggestions?


I can't test this on multiple webcams since I only have one, but I'm sure OpenCV2.0 should be able to handle it. Here's some sample code (I use Vista) with one webcam to get you started.

#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;
}

Note:

The matrix edges is allocated during the first frame processing and unless the resolution will suddenly change, the same buffer will be reused for every next frame’s edge map.

As you can see, the code is quite clean and readable! I lifted this from the OpenCV 2.0 documentation (opencv.pdf).

The code not only displays the image from the webcam (under frame) but also does real-time edge detection! Here's a screenshot when I pointed the webcam at my monitor :)

screenshot http://img245.imageshack.us/img245/5014/scrq.png

If you want code to just display the frames from one camera:

#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;
}


If the program works with UAC off or when running administrator, make sure the place you choose to save the results are in writable places like the user's my documents folder. Generally speaking root folders and the program files folder is read only for normal users.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜