如何改进OpenCV和python VideoWriter分辨率?

时间:2015-09-02 12:31:25

标签: python opencv

我有一个使用OpenCVpython的脚本,并从一组 avi 图片中创建视频(png格式)。

这些图片的分辨率很高。

问题是所得视频的分辨率非常低。

如何提高分辨率?

低分辨率与图像格式有关吗?

CODE:

writer  = cv2.VideoWriter( "C:\Users\.../demo3_4.avi", -1, 1, ( width, height ) )
nFrames = 24

for i in range( 1, nFrames ):
    img   = cv2.imread( os.path.join( str( inf ), "colorraster%d.jpg"%i ) )
    writer.write( img )

cv2.destroyAllWindows()  
writer.release()

2 个答案:

答案 0 :(得分:2)

根据documentationcv2.VideoWriter具有fourcc参数,该参数指定用于压缩帧的codec。您现在正在指定' -1'这意味着一些默认的编解码器。我建议尝试使用该列表中的不同编解码器,看看是什么给出了最好的结果。

更新:要将编解码器转换为int,文档建议:CV_FOURCC('P','I','M','1')如果您想尝试编解码器PIM1。

答案 1 :(得分:2)

如何提高分辨率?

生成具有合理像素大小 frameSize 的输出流,并且不会破坏信息质量(您已经在输入中声明了(在静态像素映射中)) "累积产品"低 FPS 每秒帧数和过于有损的CODEC( CV_FOURCC )。

语法:

>>> print cv2.VideoWriter.__doc__
VideoWriter( [ filename,
               fourcc,           # <--------- ref. below
               fps,              #            1 fps
               frameSize[,       #            73 * 59 px
               isColor  ]
               ]
              ) -> <VideoWriter object>

>>> print cv2.cv.FOURCC.__doc__
CV_FOURCC(c1, c2, c3, c4) -> int

>>> cv2.cv.FOURCC( *"XVID" )    1145656920
>>> cv2.cv.FOURCC( *"MJPG" )    1196444237
>>> cv2.cv.FOURCC( *"X264" )     875967064
>>> cv2.cv.FOURCC( *"DIB " )     541215044
>>> cv2.cv.FOURCC( *"WMV1" )     827739479
>>> cv2.cv.FOURCC( *"WMV2" )     844516695

进一步阅读:

  

FourCC 是一个4字节代码,用于指定视频编解码器。                                                                               可在fourcc.org中找到可用代码列表。                                                                               它取决于平台。                                                                               以下编解码器工作正常:                                                                                   在Fedora中: DIVX XVID MJPG X264 WMV1 WMV2 。 (XVID更为可取。MJPG会产生大尺寸视频。X264会产生非常小的视频)                                                                                   在Windows中: DIVX (更多需要测试和添加)

     

FourCC 代码作为 cv2.VideoWriter_fourcc('M','J','P','G') 传递                                                                                                     或{strong> cv2.VideoWriter_fourcc(*'MJPG) 代表MJPG

"""                                                                 # >>> http://docs.opencv.org/master/dd/d43/tutorial_py_video_display.html#gsc.tab=0
fourcc  = cv2.cv.FOURCC(  *"DIB " )
video   = cv2.VideoWriter( 'ATC_LKPR_output.avi', fourcc, 30, size ) # fps = 30, size = ( 1024, 512 )