не могу читать с веб-камеры

По каким-то странным причинам программа не может прочитать кадр с веб-камеры. Однако он успешно открывает веб-камеру. Я искал эту проблему и нашел множество решений, ни одно из которых не сработало со мной. это мой код

#include <iostream>
#include <cstdlib>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"

int main()
{
    // access the default webcam 
    cv::VideoCapture cap(0); 

    // Double check the webcam before start reading. 
    if ( !cap.isOpened() ){ 
        std::cerr  << "Cannot open the webcam " << std::endl;
        exit (EXIT_FAILURE);
    }

    cv::Mat frame;
    cv::namedWindow("webcam",CV_WINDOW_AUTOSIZE);

    while ( true ){

       // acquire frame 
       cap >> frame;

       // Safety checking 
       if ( !frame.data ){ 
         std::cerr << "Cannot acquire frame from the webcam " << std::endl;
            break;
       }

       cv::imshow("webcam", frame); 

       if ( cv::waitKey(30) == 27){
        std::cout << "esc key is pressed" << std::endl;
        break; 
       }
    }

    return 0;
} 

и это окно перед завершением программы.

введите здесь описание изображения

Я использую Windows 7 (ноутбук Dell). Код скомпилирован в режиме выпуска, связывающемся с .dll. Версия OpenCV — 2.4.10. В командной строке

cl /EHsc main.cpp /Fetest.exe /I D:\CPP_Libraries\opencv_2.4.10\build\include /link /LIBPATH:D:\CPP_Libraries\opencv_2.4.10\build\x86\vc12\lib opencv_core2410.lib opencv_highgui2410.lib 

Я запустил тот же код в Ubuntu (двойная загрузка вместе с Windows 7), и он открывает веб-камеру, но не через HighGUI, и я получил эту ошибку.

HIGHGUI ERROR: V4L/V4L2: VIDIOC_S_CROP
init done 
opengl support available 

Любые предложения по этому вопросу. После некоторых раскопок некоторые люди указали на cmake, поэтому мне нужно чтобы переустановить opencv и правильно настроить cmake. Существуют ли какие-либо решения этой проблемы без переустановки библиотеки, если это действительно проблема как для Ubuntu, так и для Windows? Спасибо


person CroCo    schedule 29.04.2015    source источник


Ответы (1)


Следуйте документации opencv для обновления VideoCapture: VideoCapture . Это простой пример захвата видео на C++.

Есть некоторые различия с вашим кодом, если Mat frame находится внутри цикла.

person Soma    schedule 29.04.2015
comment
Что ж, этот код работает, поэтому, если он не работает на вашем компьютере, это либо одна установка с дефектом, либо ваша камера несовместима с opencv. Вы также можете попробовать другой индекс камеры: VideoCapture cap(1). Возможно, ваша камера не настроена по умолчанию по каким-то причинам. - person Soma; 30.04.2015