我正在尝试从多个帧创建视频(由opencv捕获并吸收到kafka中)。我收到图像(帧)的字节字符串,并验证了它的合法性(通过写入jpeg,用cv2.imshow(..)
显示等)。我似乎无法克服的是从多个帧创建视频剪辑。
这是我当前的代码:
import cv2
import numpy as np
from kafka import KafkaConsumer
consumer = KafkaConsumer('cam', bootstrap_servers=['localhost:9092'])
fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('test.avi', fourcc, 20.0, (1920, 1080))
i = 0
for message in consumer:
print("message.topic=%s, message.partition=%d, message.offset=%d, key=%s" % (message.topic, message.partition,
message.offset, message.key))
i += 1
if i == 50:
break
nparr = np.fromstring(message.value, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
cv2.imshow('THIS IS THE CURRENT FRAME', img)
out.write(img)
if (cv2.waitKey(1) & 0xFF) == ord('q'): # Hit `q` to exit
break
out.release()
cv2.destroyAllWindows()
任何提示/帮助都将不胜感激!
答案 0 :(得分:1)
我在计算机上测试了一些类似的代码,发现了两个潜在的问题:
如果您的img
尺寸不正确(在这种情况下为1920、1080),OpenCV会默默拒绝将数据写入VideoWriter。在写入输出之前,尝试尝试类似img = cv2.resize(img, (1920, 1080))
的事情。
您的FOURCC引用的编解码器可能不存在-如果您选中out.isOpened()
,则应该能够发现问题所在。