c++ - 使用 C++、Opencv 和 GStreamer 捕获视频时出错
问题描述
我最近在 32 位 Windows 平台上用 Gstreamer 1.15.1 编译了 Opencv 4.2.0。当我尝试使用 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
关于解决问题的任何建议?
解决方案
试试这个:“ksvideosrc device-index=0!videoscale!videorate!video/x-raw,width=640,height=480,framerate=30/1!videoconvert!appsink”
使用您的代码和我刚刚构建的 OpenCV 4.3.0、gstreamer 1.15.1、32 位 Windows 10、USB 网络摄像头为我工作。我不太了解 gstreamer 来解释管道——我从一些搜索结果中把它放在一起。
我认为 ksvideosrc 来自 gst-plugins-bad。
推荐阅读
- breakpoints - 在 768 处覆盖 Bootstrap 3 Navbar 断点
- reactjs - 删除图表 js 的 x 轴上的重复值
- python - 将值添加/附加到列表中的特定索引
- multithreading - 有没有一种标准的方法来编写这个紧密耦合的 for 循环,这样它就不会烧掉我 100% 的 CPU
- reactjs - 使用 reactjs 禁用带有复选框的输入表单
- flutter - Flutter - 即使单击后退按钮,如何确保开关处于打开状态?
- json - 如何为 discord bot 发送数据和字符串?
- jpa - 如何通过JPA返回表中不存在的计数列
- c# - 如何执行此浮动操作按钮,即使在 Xamarin 表单的后台模式下也可以运行
- c# - C# 将 JToken 列表组合到 JObject