如何提高 OpenCV 和 python VideoWriter 分辨率?

Bár*_*rte 5 python opencv

我有一个脚本,它使用OpenCV并从一组图像python创建视频(avi格式)png

这些图像的分辨率很好。

问题是生成的视频的分辨率非常低。

如何提高分辨率?

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

代码:

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()
Run Code Online (Sandbox Code Playgroud)

Ash*_*ynd 5

根据文档cv2.VideoWriter具有fourcc指定编解码器的参数,用于压缩帧。您现在指定“-1”,这意味着某些默认编解码器。我建议尝试使用该列表中的不同编解码器,看看哪种可以提供最佳结果。

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


use*_*197 5

如何提高分辨率?

生成具有合理像素大小的输出流frameSize,并且不会破坏信息质量(您在上面已经说过在输入中(在静态像素图中))具有低FPS每秒帧率的“累积产品”,而且 -有损编解码器 ( 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
Run Code Online (Sandbox Code Playgroud)

进一步阅读:

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

FourCCcv2.VideoWriter_fourcc('M','J','P','G')代码作为 或cv2.VideoWriter_fourcc(*'MJPG)for传递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 )
Run Code Online (Sandbox Code Playgroud)