原因1,图像尺寸不一样,要写入的图片的高或者宽和VideoWriter设置的高或宽不对应。img.shape第一个是高,第二个是宽,VideoWriter的参数表中元组刚好相反
原因2, VideoWriter默认写入的图像是三通道的,如果图像是单通道需要转换为三通道:
img =cv.cvtColor(img,cv.COLOR_GRAY2BGR) # cv.VideoWriter()默认是写入三通道的数据
完整代码:
def save_as_avi(imgs,saveargs):
fourcc = cv.VideoWriter_fourcc(*'XVID')
fps = 2
video = cv.VideoWriter(os.path.join(saveargs[0], saveargs[1]+‘.avi’), fourcc, fps, (551, 908))
for img in imgs:
img =cv.cvtColor(img,cv.COLOR_GRAY2BGR)
print(img.shape)
video.write(img)
video.release()
cv.destroyAllWindows()
下载Python。
对于Windows用户,请访问https://www.python.org/downloads/来下载Python3;
对于Ubuntu用户,Python3已经默认安装在系统中,跳过这一步即可。
安装Flask。
在Windows上打开PowerShell或在Ubuntu上打开Shell, 执行pip install Flask。
安装MySQL插件。
在Windows上打开PowerShell或在Ubuntu上打开Shell,执行pip install PyMySQL来安装基于Python3MySQL插件。
运行程序。
在Windows双击 start.bat,或者 在Ubuntu上执
不知道处理后的图片的大小,那就打印下图片的大小就行了,保存视频时,视频的大小要和图片的大小一致。bug3:视频文件无法读取,显示只有6kb 视频文件大小设置出了问题,可以先去查看读取的视频的属性,看它的宽和高,再设置w、h就没有问题了。bug1:代码生成exe文件后运行,保存的视频是0kb 网上说的opencv的dll文件放在exe同一目录,试了没用。———————————————— 版权声明:本文为CSDN博主「夜空骑士」的原创文章,遵循CC 4.0。问题3:我设置视频长宽属性之后,打印并没有生效。
用尽网上所有方法都不行,最后发现是因为用了网上的方法QImage转Mat后就发生这样的情况,至今不知道原因。
解决方法是把每一张图片都用imwrite在本地保存再用imread读出来再保存成视频。最后保存的视频可以成功。代码就不贴了,没什么难度。
跑 demo的时候,需要写入一些图片到视频中去,
结果发现有的时候可以写入,有的时候就不可以,期望写入文件的大小为0。控制变量法发现可能是有关视频的大小,换成小一些的视频以后,还是发现呈现一种薛定谔状态。参考opencv - not writing output with cv2.VideoWriter.write, 发现居然只支持 .avi格式的视频,而我用的是.mp4,更换了之后就没什么问题了
sphereWrite.open("/Users/hfy/Insta360/video/flipVideo/result/FA_render.mp4", cv::VideoWriter::fourcc('D', 'I', 'V', 'X'), outputExporterInfo->fps, cv::Size(outputExporterInfo->width, outputExporterInfo->height));
将第二个参数改成cv::VideoWri.