微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果不使用 imshow(),则无法从 VideoCapture 正确填充 OpenCV Mat 对象

如何解决如果不使用 imshow(),则无法从 VideoCapture 正确填充 OpenCV Mat 对象

我正在尝试从网络摄像头捕获帧序列并将其显示为 QImage:

cv::Mat mat;
cap >> mat; //cap is cv::VideoCapture("/dev/video0")
cv::Mat dest;
cv::cvtColor(mat,dest,cv::COLOR_BGR2RGB);
QImage img((uchar*) dest.data,dest.cols,dest.rows,dest.step,QImage::Format_RGB888);
ui->vid->setpixmap(Qpixmap::fromImage(img));

它使用认设置,但我需要从 GStreamer 切换到 V4L2*,所以现在我像这样打开网络摄像头:

//cap is cv::VideoCapture("/dev/video0",cv::CAP_V4L2)
cap.set(cv::CAP_PROP_FOURCC,cv::VideoWriter::fourcc('M','J','P','G')); //returns true

现在我最终得到带有一些伪影的白色图像但是如果我在 cv::imshow("frame",mat) 行之后添加 >>,我可以像 mat 对象一样看到捕获的帧,没有问题被填满了......但我最终得到了这个来自 opencv2/highgui.hpp 的额外窗口,我不需要或不想要,它显示了我在 QLabel 中可以看到的相同内容。除了实际显示图像之外,cv::imshow 还能做什么?我想我需要手动完成...

    • GStreamer 突然停止工作,我收到此错误

[ WARN:0] 全局 /home/pI/Opencv/modules/videoio/src/cap_gstreamer.cpp (933) 打开 OpenCV | GStreamer 警告:无法查询视频位置: 状态=0,值=-1,持续时间=-1

我正在阅读这是一个错误,所以我想切换到 V4L2。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。