使用 OpenCV VideoWriter 保存灰度图像时出现 Gstreamer 错误

Gstreamer error in saving grayscale image with OpenCV VideoWriter

我可能遗漏了一些非常明显的东西,但我似乎无法完成这项工作。 我正在从灰度相机读取帧,然后我想通过 OpenCV VideoWriter 中的 gstreamer 编码为 H265。

这是我的 gstreamer 管道:

gst_out =('appsrc caps=video/x-raw,format=GRAY8,width=1280,height=800,framerate=30/1 ! '
    'videoconvert ! omxh265enc ! video/x-h265, stream-format=byte-stream ! '
    'h265parse ! filesink location=test.h265 ')

writer= cv2.VideoWriter(gst_out, cv2.CAP_GSTREAMER, 0, 30, (1280, 800), True)

但是当我尝试在其中写入帧时出现错误

[ WARN:0] global /home/nvidia/host/build_opencv/nv_opencv/modules/videoio/src/cap_gstreamer.cpp (1629) writeFrame OpenCV | GStreamer warning: cvWriteFrame() needs images with depth = IPL_DEPTH_8U and nChannels = 3.

我不明白,因为它应该接受 GRAY8 格式,而且我已经确认该帧只有一个通道。如果我将帧转换为 BGR,它可以工作,但这不是我想要的,因为我只需要保存灰度图像,而且我也不明白为什么当我在管道中指定 GRAY8 时它会接受 BGR 帧。

非常感谢任何帮助。

您正在构建 cv::VideoWriterisColor 设置为 true

VideoWriter (const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)

这就是 OpenCV 需要彩色图像(具有 3 个通道)而不是灰度图像的原因。

(注意:这个在评论中讨论过,我只是为了关闭问题而写它作为答案)