当我尝试在Jetson TX2上用OpenCV打开一个网络摄像头(FLIR玻色子)时,它给出了以下错误:
libv4l2: error set_fmt gave us a different result then try_fmt!
VIDEOIO ERROR: libv4l unable convert to requested pixfmt我使用的是这个python脚本:
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
# Capture frame-by-frame
ret, frame = cap.read()
# Our operations on the frame come here
# Display the resulting frame
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()虽然它确实显示了视频,但它显示了这些错误。相关的原因是我正在尝试让FLIR玻色子与运行这个程序https://github.com/naisy/realtime_object_detection的Jetson TX2一起工作
我有一个常规的网络摄像头工作,但与FLIR玻色子,它提供
libv4l2: error set_fmt gave us a different result then try_fmt!
VIDEOIO ERROR: libv4l unable convert to requested pixfmt
VIDEOIO ERROR: V4L: Initial Capture Error: Unable to load initial memory buffers.
Segmentation fault (core dumped)出现上述错误并关闭。在我对这个错误的研究中,似乎出现了使用单色摄像头的人,看着这个https://www.flir.com/support-center/oem/is-there-a-way-to-maximize-the-video-display-on-the-boson-app-for-windows-pc-to-full-screen/,我想知道我是否需要配置OpenCV或V4L2驱动程序来为摄像头选择正确的格式以防止错误。
我也有一台Jetson Xavier,同样的物体检测程序也可以在上面运行(它只有一个不同的OpenCV和Tensorflow版本),所以我猜Xavier和TX2上安装的OpenCV上的摄像头格式兼容性略有不同。我对这一切都是新手,所以请原谅我要求更多的澄清。
最后一点信息,这是来自与USB相关的FLIR玻色子手册:
8.2.2 USB Boson能够作为USB视频类(UVC)兼容设备提供数字数据。提供了两个输出选项。注意,这些选项不是通过CCI选择的,而是由用户选择的视频捕获或查看软件选择的。选项包括:
Pre-AGC (16位):输出与阵列中每个像素上入射的通量成线性关系;320配置的输出分辨率为320x256,640配置的输出分辨率为640x512。请注意,AGC设置、缩放设置和颜色编码设置对此轻击点处的输出信号没有影响。此选项由UVC视频格式4CC代码“Y16”(16位未压缩灰度图像)标识。
着色后,YCbCrb:使用指定的调色板将输出转换到YCbCr颜色空间(请参见第6.7节)。320和640配置的分辨率均为640x512。提供三个选项,通过UVC视频格式4CC代码标识:
·I420: 8位Y平面,后跟8位2x2二次采样U和V平面
·NV12: 8位Y平面,后跟具有2x2子采样的交错U/V平面
·NV21:与NV12相同,只是U和V平面的顺序相反
我已经尝试重新安装了几次,尽管刷新TX2和重新安装open CV和Tensorflow需要几个小时。我已经尝试了两种不同的opencv“构建”。我试着用奶酪来查看网络摄像头,从来没有遇到过问题。
发布于 2019-01-29 15:11:59
发布于 2019-02-12 04:16:12
我找到了一种让它工作的方法,使用下面的工作代码。这似乎是开放式简历与v4l2交互的问题。
pipeline = "v4l2src device=/dev/video1 ! video/x-raw,width=640,height=512,format=(string)I420,pixel-aspect-ratio=1/1, interlace-mode=(string)progressive, framerate=30/1 ! videoconvert ! appsink"
cap = cv2.VideoCapture(pipeline, cv2.CAP_GSTREAMER)https://stackoverflow.com/questions/54414147
复制相似问题