Видеозапись OpenCV не работает в Visual Studio 2017 (Windows 10)

#windows #opencv #video-capture

#Windows #opencv #видеосъемка

Вопрос:

У меня очень странная проблема. VideoCapture не открывает ни веб-камеру, ни видеофайл при запуске приложения C из Visual Studio, а в случае веб-камеры выдает следующую ошибку:

Ошибка при запуске WinRT — 0xC00D36B3: «Указанный номер потока был неверным».

за которым следует

Исключение Microsoft C : _com_error в ячейке памяти 0x000000D9B66FCBB0. Исключение Microsoft C : _com_error в ячейке памяти 0x000000D9B66FCAA0. Исключение Microsoft C : cv::Exception в ячейке памяти 0x000000D9B66FEFD0. Исключение Microsoft C : cv::Exception в ячейке памяти 0x000000D9B66FEFD0.

Но когда я запускаю приложение извне VS — все работает. Я использую OpenCV версии 4.0.0

Ответ №1:

Чтобы диагностировать вашу проблему, сначала попробуйте следующее и дайте мне отзыв.

 #include <opencv2/opencv.hpp>

using namespace cv;

int main()
{
    VideoCapture cap(0); // open the default camera
    if (!cap.isOpened())  // check if we succeeded
        return -1;

    Mat edges;
    Mat frame;
    namedWindow("edges", WINDOW_NORMAL);

    while (true)
    {
        cap >> frame; // get a new frame from camera
        cvtColor(frame, edges, COLOR_RGB2GRAY);
        GaussianBlur(edges, edges, Size(7, 7), 1.5, 1.5);
        Canny(edges, edges, 0, 50, 3);
        imshow("edges", edges);
        if (waitKey(30) >= 0) break;
    }
    // the camera will be deinitialized automatically in VideoCapture destructor
}
  

Требуемые библиотеки:

 opencv_core401.lib
opencv_imgproc401.lib
opencv_videoio401.lib
opencv_highgui401.lib
  

Комментарии:

1. Я использую предварительно созданный двоичный файл OpenCV, поэтому необходимо включить только opencv_world400.lib. Ваш код работает даже при запуске из VS. В моем проекте я использую модуль dnn, и я заметил, что — когда я исключаю из исходных текстов весь код, связанный с созданием экземпляров нейронной сети — проблема исчезает..