Python YU12到CV2的RGB失败

问题描述 投票:0回答:1

我试图从网络摄像头获取帧,并使用python处理它们。网络摄像头告诉我它使用YU12编解码器。未处理的帧(1280x720)如下所示:enter image description here您应该在图片中看到一杯咖啡,我的手臂和我的显示器在后台。由于某种原因,图片看起来很奇怪。看锅柄。

如果尝试将其转换为RGB,则会出现以下错误:

cv2.error:OpenCV(4.1.2)/io/opencv/modules/imgproc/src/color.simd_helpers.hpp:92:error:(-2:Unspecified error)in function'cv :: impl :: { [匿名} :: CvtHelper :: CvtHelper(cv :: InputArray,cv :: OutputArray,int) VDcn = cv :: impl :: {anonymous} :: Set <3,4>; VDepth = cv :: impl :: {anonymous} :: Set <0>; cv :: impl :: {{anonymous} :: SizePolicy sizePolicy =(cv :: impl :::: SizePolicy)1u; cv :: InputArray = const cv :: _ InputArray&; cv :: OutputArray = const cv :: _ OutputArray&]'输入图像中的通道数无效:'VScn :: contains(scn)'哪里“ scn”是3

import os
import sys
import cv2

videoSource = 0


def getFrame():
    """"""

    cv_cam_0 = cv2.VideoCapture(0)
    if not cv_cam_0.isOpened():
        raise Exception('video source: %s could not be opened' %(str(videoSource)))

    codec_char_code = int(cv_cam_0.get(cv2.CAP_PROP_FOURCC))
    a = chr(0x000000FF&  codec_char_code)
    b = chr((0x0000FF00& codec_char_code)  >> 8)
    c = chr((0x00FF0000& codec_char_code)  >> 16)
    d = chr((0xFF000000& codec_char_code)  >> 24)

    print('codec 4 char code: ' + a+b+c+d)

    ret, raw_frame = cv_cam_0.read()
    cv2.imwrite('/tmp/test0.jpg', raw_frame)
    rgbFrame = cv2.cvtColor(raw_frame, cv2.COLOR_YUV2RGB_I420)
    cv2.imwrite('/tmp/testConvert.jpg', rgbFrame)



def main(args):
    getFrame()
    sys.exit()


if __name__ == "__main__":
    main(sys.argv)

如果我使用mplayer,则网络摄像头的图片看起来不错。为了从mplayer输出调试信息:

找不到匹配的色彩空间-使用-vf比例重试...正在打开视频过滤器:[比例]未定义Movie-Aspect-否已应用预缩放。 [swscaler @ 0x5638ca496560]双三次洁牙机,来自yuyv422到yuv420p使用MMXEXT [swscaler @ 0x5638ca496560]使用未缩放的yuyv422-> yuv420p特殊转换器VO:[xv] 1920x1080 =>1920x1080平面YV12选定的视频编解码器:[rawyuy2] vfm:原始(RAWYUY2)

python opencv rgb cv2
1个回答
0
投票

正确,我不知道哪里出了问题。我所做的是使用v4l2-ctl,也许有人可以给我提示。

v4l2-ctl -d / dev / video2 --all

格式化视频捕获:

Width/Height      : 1280/720
Pixel Format      : 'YUYV' (YUYV 4:2:2)
Field             : None
Bytes per Line    : 2560
Size Image        : 1843200
Colorspace        : sRGB
Transfer Function : Default (maps to sRGB)
YCbCr/HSV Encoding: Default (maps to ITU-R 601)
Quantization      : Default (maps to Limited Range)
Flags             : 
© www.soinside.com 2019 - 2024. All rights reserved.