0

我有一个连接到树莓派 4 的AMG88xx 红外摄像头,我正在使用 linux video-i2c驱动程序,该驱动程序似乎可以正常工作

v4l2-ctl -d /dev/video0 --all
    Driver Info:
        Driver name      : video-i2c
        Card type        : I2C 1-104 Transport Video
        Bus info         : I2C:1-104
        Driver version   : 4.19.102
        Capabilities     : 0x85200001
                Video Capture
                Read/Write
                Streaming
                Extended Pix Format
                Device Capabilities
        Device Caps      : 0x05200001
                Video Capture
                Read/Write
                Streaming
                Extended Pix Format
    Priority: 2
    Video input : 0 (Camera: ok)
    Format Video Capture:
        Width/Height      : 8/8
        Pixel Format      : 'Y12 ' (12-bit Greyscale)
        Field             : None
        Bytes per Line    : 16
        Size Image        : 128
        Colorspace        : Raw
        Transfer Function : Default (maps to None)
        YCbCr/HSV Encoding: Default (maps to ITU-R 601)
        Quantization      : Default (maps to Full Range)
        Flags             :
    Streaming Parameters Video Capture:
        Capabilities     : timeperframe
        Frames per second: 10.000 (10/1)
        Read buffers     : 1

但是,openCV 似乎不支持输出像素格式(Y12)

>>> import cv2
>>> capture = cv2.VideoCapture(0)
VIDEOIO ERROR: V4L2: Pixel format of incoming image is unsupported by OpenCV
VIDEOIO ERROR: V4L: can't open camera by index 0

我是否需要构建带有额外支持的 OpenCV?或以某种方式转换像素格式?

4

2 回答 2

1

你不需要OpenCV也不需要cv2.VideoCapture()读取那个相机。它只是一个相对较慢的 I2C 设备,您可以直接读取,也可以使用本示例中的 Adafruit 库。

无论如何,您可以按照上述方式读取它,然后将其从 12 位转换为 8 位或 16 位 Numpy 数组,然后使用OpenCV进行处理,但这不是必需的。

或者,您可以ffmpeg像我在此答案的第二部分中所做的那样嵌入一个子流程调用。

于 2020-02-13T19:05:07.993 回答
0

问题与 OpenCV 中丢失的像素格式有关(参见问题#16620),由#16626修复

通过将video4linux 像素格式与模块/videoio/src/cap_v4l.cpp中 openCV 支持的像素格式进行比较发现

于 2020-02-28T21:49:55.520 回答