cv2.VideoWriter生成条纹、拉伸变形异常视频问题求助
问题修复方案
你遇到的条纹、拉伸、黑条异常由以下原因导致,对应修复方法如下:
核心原因
OpenCV的cv2.VideoWriter参数规则和图像numpy数组的shape规则不匹配,加上硬编码输出尺寸,最终导致帧数据解析错位:
cv2.VideoWriter的尺寸参数要求格式为(宽度, 高度)- 存储的图像是numpy数组,shape顺序为
(高度, 宽度),两者顺序完全相反 - 硬编码的
(160,122)大概率和实际输入帧的尺寸不匹配,VideoWriter不会自动适配帧尺寸,会强制按写入的尺寸解析原始像素数据,就会出现条纹、错位问题
修复后代码
def saveVideo(self): import cv2 # 空列表直接返回避免报错 if len(self.images) == 0: return # 取第一帧获取实际宽高,不要硬编码 frame_h, frame_w = self.images[0].shape[:2] # 尺寸参数传入顺序是(宽度, 高度)即(frame_w, frame_h) out = cv2.VideoWriter("output.mp4", cv2.VideoWriter_fourcc(*'mp4v'), self.fps, (frame_w, frame_h), 0) for img in self.images: # 可选:保证所有帧尺寸统一,避免个别帧尺寸不一致导致异常 write_frame = cv2.resize(img, (frame_w, frame_h)) out.write(write_frame) out.release()
其他可选排查点
- 确认所有输入帧的像素类型为
uint8,如果你的像素是0~1范围的浮点型数值,需要先乘255再转uint8再写入 - 部分环境下mp4v编码器要求宽高为2的倍数,如果你的实际帧宽/高为奇数,可以先给边缘补1像素黑边再写入
内容的提问来源于stack exchange,提问作者Raquel
相关产品推荐
相关产品推荐

