用于 OpenCV 问题的 Video4Linux Y12 像素格式
Video4Linux Y12 Pixel Format for use with OpenCV issues
我有一个 AMG88xx infrared camera 附加到 raspberry PI 4
我正在使用 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 是否需要额外的支持?或者以某种方式转换像素格式?
您不需要 OpenCV 和 cv2.VideoCapture()
来读取该相机。它只是一个相对较慢的 I2C 设备,您可以直接读取或使用 Adafruit 库,如 this example.
无论如何,您可以像上面那样读取它,然后从 12 位转换为 8 位或 16 位 Numpy 数组,然后用 OpenCV 之后,但没有必要。
或者,您可以嵌入对 ffmpeg
的子进程调用,就像我在 this answer.
第二部分所做的那样
问题与 OpenCV 中缺少像素格式有关(请参阅问题 #16620) fixed by #16626
比较发现video4linux pixelformats with those supported by openCV in modules/videoio/src/cap_v4l.cpp
我有一个 AMG88xx infrared camera 附加到 raspberry PI 4 我正在使用 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 是否需要额外的支持?或者以某种方式转换像素格式?
您不需要 OpenCV 和 cv2.VideoCapture()
来读取该相机。它只是一个相对较慢的 I2C 设备,您可以直接读取或使用 Adafruit 库,如 this example.
无论如何,您可以像上面那样读取它,然后从 12 位转换为 8 位或 16 位 Numpy 数组,然后用 OpenCV 之后,但没有必要。
或者,您可以嵌入对 ffmpeg
的子进程调用,就像我在 this answer.
问题与 OpenCV 中缺少像素格式有关(请参阅问题 #16620) fixed by #16626
比较发现video4linux pixelformats with those supported by openCV in modules/videoio/src/cap_v4l.cpp