Ошибка захвата видео с использованием C ++, Opencv и GStreamer - PullRequest
0 голосов
/ 22 марта 2020

Я недавно скомпилировал Opencv 4.2.0 с Gstreamer 1.15.1 на 32-битной платформе Windows. Когда я пытаюсь захватить видео с помощью бэкенда Gstreamer, захват видео завершается неудачно. Вот код и вывод:

void main()
{
    VideoCapture cap("video/x-raw,format=YUV2,width=640,height=480,framerate=30/1 ! appsink", CAP_GSTREAMER);
   //VideoCapture cap(0,CAP_GSTREAMER);
    if (!cap.isOpened())
    {
        cout << "VideoCapture not opened" << endl;
        exit(-1);
    }

    Mat frame;

    while (true) {

        cap.read(frame);

        if (frame.empty())
            break;

        imshow("output", frame);
        if (waitKey(1) == 's')
            break;
    }
    destroyWindow("output");
}

Вот вывод:

(testNewOpencv.exe:7392): GStreamer-CRITICAL **: 20:08:16.574: gst_element_make_
from_uri: assertion 'gst_uri_is_valid (uri)' failed
[ WARN:0] global \modules\videoio\src\cap_gstreamer.cpp (713) cv::GStreamerCapture::open OpenCV | GStreamer warning: Error opening bin: no element "video"
[ WARN:0] global \modules\videoio\src\cap_gstreamer.cpp (480) cv::GStreamerCapture::isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
VideoCapture not opened

Есть предложения по решению проблемы?

1 Ответ

0 голосов
/ 13 апреля 2020

Попробуйте это: "ksvideosr c device-index = 0! Видеомасштаб! Видеорейт! Video / x-raw, ширина = 640, высота = 480, частота кадров = 30/1! Видеоконвертировать! Appsink"

Работает для меня с вашим кодом и моей только что построенной OpenCV 4.3.0, gstreamer 1.15.1, 32-битной Windows 10, USB-камерой. Я не знаю gstreamer достаточно хорошо, чтобы объяснить конвейер - я собрал его из кусочков результатов поиска.

Я думаю, что ksvideosr c из gst-plugins-bad.

...