我试图从网络摄像头获取帧,并使用python处理它们。网络摄像头告诉我它使用YU12编解码器。未处理的帧(1280x720)如下所示:您应该在图片中看到一杯咖啡,我的手臂和我的显示器在后台。由于某种原因,图片看起来很奇怪。看锅柄。
如果尝试将其转换为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)
正确,我不知道哪里出了问题。我所做的是使用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 :