Video4 Linux Y12 Pixel Format для использования с проблемами OpenCV - PullRequest
0 голосов
/ 13 февраля 2020

У меня есть Инфракрасная камера AMG88xx , подключенная к Raspberry PI 4. Я использую драйвер linux video-i2 c, драйвер работает правильно

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

Однако формат вывода пикселей (Y12), по-видимому, не поддерживается openCV

>>> 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 с дополнительной поддержкой? или как-то конвертировать пиксельформат?

Ответы [ 2 ]

1 голос
/ 13 февраля 2020

Вам не нужны OpenCV и cv2.VideoCapture() для чтения этой камеры. Это просто относительно медленное устройство I2 C, которое вы можете читать напрямую или использовать библиотеку Adafruit, как в в этом примере.

В любом случае, вы могли бы прочитайте его, как указано выше, а затем преобразуйте из 12-разрядного в 8-разрядный или 16-разрядный массив Numpy, а затем обработайте OpenCV , но это не обязательно.

В качестве альтернативы Вы можете встроить вызов подпроцесса в ffmpeg, как я делал во второй части этого ответа .

0 голосов
/ 29 февраля 2020

Проблема была связана с отсутствующим форматом пикселей в OpenCV (см. Проблема # 16620 ), исправленным # 16626

, найденным при сравнении video4 linux пиксельные форматы с теми, которые поддерживаются openCV в modules / videoio / src / cap_v4l. cpp

...