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