OpenCV VideoWriter 写入空视频

卢内森
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()

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

我试过的

  1. 我发现如果尺寸不同,视频就不会写。所以我匹配的维度是 (640,480)
  2. 我试图将编解码器从 XVID 更改为不同的编解码器。最后,我发现“XVID”编解码器适用于 .avi 文件,所以我决定保留它。

您的代码存在三个问题。

问题#1


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

    • Fourcc = cv2.VideoWriter_fourcc(*'MJPG')

问题#2

  • 您需要VideoWriter仔细定义

    • 当你定义尺寸​​时,它应该是frame_widthframe_height

    • 例如,如果你想创建一个 size 的视频(640, 480),你需要VideoWriter(480, 640)

    • out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (480, 640))
      
    • 此外,您正计划创建一个灰度视频,因此您需要初始化isColorFalse

    • out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (480, 640), isColor=False)
      

问题#3:


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

    • while True:
          img = np.zeros((640, 480), dtype=np.uint8)
      

如果您解决问题,结果将是:

在此处输入图片说明

代码:


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 = 'video.mp4'

fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('SaveVideo2.avi', fourcc, 20.0, (480, 640), isColor=False)

while True:
    img = np.zeros((640, 480), dtype=np.uint8)
    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()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章