问题描述
我正在尝试从网络摄像头捕获帧序列并将其显示为 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
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)