2009-11-01 2 views
2

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

ответ

2

Я не могу проверить это на нескольких веб-камерах, поскольку у меня есть только один, но я уверен, что 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), но и обнаруживает края в реальном времени! Вот скриншот, когда я указал веб-камеры на моем мониторе :)

screenshot 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

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

Смежные вопросы