【问题标题】:How to improve OpenCV and python VideoWriter resolution?如何提高 OpenCV 和 python VideoWriter 分辨率?
【发布时间】:2021-12-30 11:19:37
【问题描述】:

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

这些图片的分辨率很好。

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

如何提高分辨率?

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

代码:

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()

【问题讨论】:

  • 图片的尺寸是多少?你读过class description in the manual吗?您将 VideoWriter 的分辨率设置为多少(实例化时的第 5 个数字)?你能显示一些代码吗?
  • 你能提供一些代码吗?不然帮到你就不容易了……
  • ljetibo,图片有73*59像素。
  • cv2.VideoWriter 是否有一些选项可以设置所需的分辨率?
  • 尝试改变cv2.VideoWriter的fourcc参数,而不是提供默认值。

标签: python opencv


【解决方案1】:

根据documentationcv2.VideoWriterfourcc参数,指定codec,用于压缩帧。您现在指定“-1”,这意味着一些默认编解码器。我建议尝试使用该列表中的不同编解码器,看看什么能提供最佳结果。

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

【讨论】:

  • 我正在搜索fourcc 文档,但我不理解所使用的代码。我有'-1',默认代码,但我没有在列表fourcc.org/codecs.php 中看到此代码。
  • 它不存在,因为它只是“默认值”。
  • 我试试你说的,但是 python 在我的代码中无法识别 CV_FOURCC('P','I','M','1')。
  • 好吧,对于python,我猜它应该是稍微不同的形式。刚刚在另一个答案(stackoverflow.com/questions/15584608/…)中发现它:cv2.VideoWriter_fourcc('P','I','M','1')
  • 好的。我得到它!!但是知道我尝试了几种编解码器,但视频始终无法正常工作,仅适用于“-1”。 windows 媒体播放器的最佳编解码器是什么?
【解决方案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 中:DIVXXVIDMJPGX264 WMV1WMV2。 (XVID 更可取。MJPG 导致大尺寸视频。X264 提供非常小尺寸的视频) 在 Windows 中:DIVX(更多待测试和添加)

FourCC 代码作为 cv2.VideoWriter_fourcc('M','J','P','G') 传递 或 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 )

【讨论】:

  • 我也尝试过这种方法,但给我一个错误 cv2.cv 不存在。
猜你喜欢
  • 1970-01-01
  • 2010-09-06
  • 1970-01-01
  • 2019-06-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多