OpenCV VideoWriter写入一个空视频

OpenCV VideoWriter写入一个空视频,opencv,Opencv,我想录制一段视频,显示一个圆圈以恒定速度从屏幕左侧移动到右侧。上面的代码运行时没有错误,但结果视频是空的,只有黑屏 我尝试的 我发现如果维度不同,视频就不会写。因此,我将维度匹配为(640480) 我尝试将编解码器从XVID更改为不同的编解码器。最后,我发现“XVID”编解码器可以使用.avi文件,所以我决定保留它 您的代码有三个问题 第1期: 如果您要创建.avi,我建议您使用MJPG fourcc=cv2.VideoWriter_fourcc(*'MJPG') 第二期: 您需要

我想录制一段视频,显示一个圆圈以恒定速度从屏幕左侧移动到右侧。上面的代码运行时没有错误,但结果视频是空的,只有黑屏

我尝试的

  • 我发现如果维度不同,视频就不会写。因此,我将维度匹配为(640480)
  • 我尝试将编解码器从XVID更改为不同的编解码器。最后,我发现“XVID”编解码器可以使用.avi文件,所以我决定保留它

  • 您的代码有三个问题

    第1期


    • 如果您要创建
      .avi
      ,我建议您使用
      MJPG

      • fourcc=cv2.VideoWriter_fourcc(*'MJPG')
    第二期:

    • 您需要仔细定义
      VideoWriter

      • 定义尺寸时,它应该是
        frame\u width
        frame\u height

      • 例如,如果要创建大小为
        (640480)
        的视频,则需要使用
        (480,640)
        初始化
        VideoWriter

      • out=cv2.VideoWriter('SaveVideo2.avi',fourcc,20.0,(480640))
        
      • 此外,您计划创建灰度视频,因此需要将
        isColor
        初始化为
        False

      • out=cv2.VideoWriter('SaveVideo2.avi',fourcc,20.0,(480640),isColor=False)
        
    问题#3:


    • 如果要创建黑色图像,则需要定义其类型:

      • 为True时:
        img=np.zero((640480),dtype=np.uint8)
        
    如果您解决了这些问题,结果将是:

    代码:


    导入cv2
    将numpy作为np导入
    导入时间
    导入系统
    输入io
    sys.stdout=io.TextIOWrapper(sys.stdout.detach(),编码='utf-8')
    sys.stderr=io.TextIOWrapper(sys.stderr.detach(),编码='utf-8')
    img=np.零((640480))
    中心x=0
    中心y=256
    videoFile1='video.mp4'
    fourcc=cv2.VideoWriter_fourcc(*'MJPG')
    out=cv2.VideoWriter('SaveVideo2.avi',fourcc,20.0,(480640),isColor=False)
    尽管如此:
    img=np.zero((640480),dtype=np.uint8)
    img=cv2.圆(img,(中心x,中心y),20,120,-1)
    cv2.imshow(“img”,img)
    输出。写入(img)
    中心x+=3
    时间。睡眠(1/30)
    如果cv2.waitKey(1)&0xFF==ord('q'):
    打破
    out.release()
    cv2.destroyAllWindows()
    
    为什么定义
    videoFile1
    变量?@Ahx我在调试时更改了它。最初,VideoWriter的第一个变量是videoFile1。
    import cv2
    import numpy as np
    import time
    import sys
    import io
    
    sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')
    sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')
    
    
    img = np.zeros((640,480))
    
    center_x = 0
    center_y = 256
    
    videoFile1 = 'D:/Python/6. Const_Speed/sample1.mp4'
    
    fourcc = cv2.VideoWriter_fourcc(*'XVID')
    out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (640, 480))
    
    while True:
        img = np.zeros((640, 480))
        img = cv2.circle(img, (center_x, center_y), 20, 120, -1)
    
        cv2.imshow('img', img)
        out.write(img)
    
        center_x += 3
        time.sleep(1/30)
    
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    out.release()
    cv2.destroyAllWindows()