Сделайте снимок с нескольких веб-камер, используя C ++ - PullRequest
2 голосов
/ 01 ноября 2009

Мне нужна программа для захвата изображений с нескольких веб-камер и их автоматического сохранения в Windows Vista. Я получил основной код от этой ссылки . Код работает в Window XP, но когда я попытался использовать его в Vista, он говорит «не удалось». Различные ошибки появляются каждый раз, когда это выполняется. Поможет ли мне использовать платформу SDK? У кого-нибудь есть предложения?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2009

Я не могу проверить это на нескольких веб-камерах, поскольку у меня есть только одна, но я уверен, что 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;
}
0 голосов
/ 02 ноября 2009

Если программа работает с отключенным UAC или при запуске администратора, убедитесь, что место, в котором вы хотите сохранить результаты, находится в доступных для записи местах, например в папке «Мои документы» пользователя. Вообще говоря, корневые папки и папка программных файлов доступны только для обычных пользователей.

...