我正在使用终端中的以下代码从raspberry pi零流式传输实时usb相机源:
gst-launch-1.0 -v v4l2src device=/dev/video0 ! "image/jpeg,width=640, height=480, framerate=30/1" ! rtpjpegpay ! udpsink host=<MyRPiIPHere> port=5000
通过在终端中使用以下代码,我可以从我的计算机(ubuntu 18.4)获得低延迟的高帧率流而没有任何问题:
gst-launch-1.0 -e -v udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG, payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink
但是,我想使用python和opencv来获取该流,以便对图像进行一些操作 .
当我尝试使用此代码使用cv2库获取图像时:
cap = cv2.VideoCapture('udpsrc port=5000 ! application/x-rtp, encoding-name=JPEG, payload=26 ! rtpjpegdepay ! jpegdec ! autovideosink')
它没有抓到任何东西 . 我还尝试将各种类型的 ! videoconvert ! video/x-raw, format=(string)BGR ! appsink
版本添加到视频捕捉参数中 .
frame
在调用 ret, frame = cap.read()
后始终返回 None .
我已经分别安装了opencv(cv2 .__ version__ = 3.4.0)和gstreamer(gst-launch-1.0) .
我经常搜索解决方案,但找不到一个简单的解决方案 . 我读过像"you should build opencv with gstreamer support"这样的东西 . 我如何检查我的opencv是否具有gstreamer支持以及如何安全地构建opencv与gstreamer支持安心地记住我在计算机上安装了opencv和gstreamer(我不介意卸载它们但是因为我的linux知识不好一个人应该给我一步一步的指示:/)
有没有解决方案让我使用python和cv2库获取该流而无需卸载重建opencv?
如果我需要使用Gstreamer模块支持重建opencv,我如何安全地卸载已安装的库并重建opencv?
任何帮助深表感谢!
1 回答
如果您安装了带有gstreamer支持的opencv,我可以回答有关如何查找的问题 .
将其粘贴到Python脚本中:
你应该找到类似的东西:
如果不是,则必须使用gstreamer支持重新安装opencv .