Python实现视频画质增强的示例代码

 更新时间:2022年04月27日 14:46:58   作者:派森酱  
这篇文章主要为大家详细介绍了如何利用Python语言实现对视频进行画质增强功能,文中的示例代码讲解详细,感兴趣的小伙伴可以尝试一下

前言

前面通过文章 几行代码,实现Python捕获、播放和保存摄像头视频!给大家介绍了如何读取、播放和保存视频,后面又通过文章 Python美图技术也就几行代码!给大家介绍了如何对图像的亮度、对比度、色度或者锐度进行调整,从而达到基本的图像处理操作。

其实,那两篇文章都是铺垫,都是为了给大家介绍如何对视频进行画质增强。本文将结合前面两篇文章的内容,来讲讲如何对视频画质进行增强。

想要直接看效果的,可以拉到文末。

原理

不知道大家小时候有没有玩过这个?

最早的动画就是这么形成的,记得小时候还有这种小书卖。

其实视频的原理也是这样,一个视频是由很多张图片组成的,一个图片是一帧。所以我们要对视频进行画质增强,可以拆分成对每一帧的图片进行操作,这个操作我们在前面介绍过。

因此,对视频进行画质增强的方法可以分为三步:拆分->处理->合成。

实现步骤

拆分

我们在第一篇文章讲到过如何捕获摄像头的视频流,以及如何读取视频并播放。不管通过哪种方法,我们都是通过帧操作的。所以这里所谓的拆分就是获取到我们捕获到的视频流或者读取的视频流的每一帧。

success, img1 = cap.read()
    # 如果正确读取帧,success为True
    if not success:
        break
    cv2.imshow('img1', img1)

就是这么简单,我们就可以获取到视频每一帧了。

处理

获取到视频的一帧之后,我们就要把这一帧转换成我们可以处理的格式的图片。在前面我们介绍如何对图片进行画质增强的时候,使用的是 ImageEnhance 这个函数的相关方法,这个函数是 PIL 图像处理库里面的,所以我们必须把我们每一帧的图片读取成 PIL 可以处理的格式:

image = Image.fromarray(np.uint8(img1))  # 转换成PIL可以处理的格式

读取到图像之后,我们就可以对图像进行画质增强处理了,这里还是用我们上篇文章中讲到的代码:

# 图像处理
def img_enhance(image, brightness=1, color=1,contrast=1,sharpness=1):
    # 亮度增强
    enh_bri = ImageEnhance.Brightness(image)
    if brightness:
        image = enh_bri.enhance(brightness)

    # 色度增强
    enh_col = ImageEnhance.Color(image)
    if color:
        image = enh_col.enhance(color)

    # 对比度增强
    enh_con = ImageEnhance.Contrast(image)
    if contrast:
        image = enh_con.enhance(contrast)

    # 锐度增强
    enh_sha = ImageEnhance.Sharpness(image)
    if sharpness:
        image = enh_sha.enhance(sharpness)

    return image

合成

图像处理完,我们需要每一帧图像进行合成,从而得到我们最终的视频:

cap = cv2.VideoCapture('你的视频目录/xxx.mp4')
success, _ = cap.read()
# 分辨率-宽度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
# 分辨率-高度
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# 总帧数
frame_counter = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
video_writer = cv2.VideoWriter('输出.mp4', cv2.VideoWriter_fourcc('M', 'P', '4', 'V'), 15, (width, height), True)

while success:
    success, img1 = cap.read()
    try:
        image = Image.fromarray(np.uint8(img1))  # 转换成PIL可以处理的格式
        img_enhanced = img_enhance(image, 2, 2, 2, 3)
        video_writer.write(np.asarray(img_enhanced))
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    except:
        break


cap.release()
video_writer.release()
cv2.destroyAllWindows()

我这里读取的是 mp4 格式的视频,所以在合成写视频文件的时候,我们需要用

cv2.VideoWriter_fourcc('M', 'P', '4', 'V') 这个格式。

我这里没有对图片的分辨率进行修改,只是分别获取原始视频的分辨率,然后写入视频文件的时候,将原始分辨率传入作为参数。

如果你需要修改视频的分辨率的话,可以使用下面的方式:

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

使用 resize 方法就可以了:

resized = cv2.resize(img, (width, height), interpolation = cv2.INTER_AREA)

效果

我们先来看看处理前的视频:

处理之后(我这里处理比较随意,参数都是随意写的)的视频是这样子的:

总结

到此为止,我们的视频画质增强的功能算是基本实现了,代码也不复杂,加起来也就这么点。但是,如果要处理成自己满意的效果,还是需要下一番功夫去调参数,去优化。甚至针对每一帧可能传入的参数都不一样,这就需要各位自己去慢慢研究了。

以上就是Python实现视频画质增强的示例代码的详细内容,更多关于Python视频画质增强的资料请关注脚本之家其它相关文章!

相关文章

  • Python Playwright的使用详解

    Python Playwright的使用详解

    本篇博客为大家介绍一款新的自动化测试工具,效果类似 selenium,但是这个模块年轻。模块名称为 playwright-python,微软开源的,是针对 Python 语言的纯自动化工具,感兴趣的可以了解一下
    2022-10-10
  • python常见的占位符总结及用法

    python常见的占位符总结及用法

    在本篇文章里小编给大家整理的是一篇关于python常见的占位符总结及用法,有兴趣的朋友们可以跟着学习参考下。
    2021-07-07
  • pytorch下tensorboard的使用程序示例

    pytorch下tensorboard的使用程序示例

    我们都知道tensorflow框架可以使用tensorboard这一高级的可视化的工具,这篇文章主要介绍了pytorch下tensorboard的使用,需要的朋友可以参考下
    2021-10-10
  • pandas中df.groupby()方法深入讲解

    pandas中df.groupby()方法深入讲解

    在使用pandas进行数据统计分析时遇到了问题,找了很久才找到解决办法,所以下面这篇文章主要给大家介绍了关于pandas中df.groupby()方法的相关资料,需要的朋友可以参考下
    2022-12-12
  • OpenCV-Python给图像去除水印多种方法

    OpenCV-Python给图像去除水印多种方法

    这篇文章主要给大家介绍了关于OpenCV-Python给图像去除水印的多种方法,文中介绍的每种方法都有其适用场景和实现步骤,具体实现需要根据实际情况选择和调整,需要的朋友可以参考下
    2024-12-12
  • Python设计模式结构型代理模式

    Python设计模式结构型代理模式

    这篇文章主要介绍了Python设计模式结构型代理模式,代理模式即Proxy Pattern,为其他对象提供一种代理以控制对这个对象的访问,下文内容详细介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-02-02
  • 如何在mac环境中用python处理protobuf

    如何在mac环境中用python处理protobuf

    这篇文章主要介绍了如何在mac环境中用python处理protobuf,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • Python内存池机制的实现

    Python内存池机制的实现

    Python内存池是Python解释器为了提高内存分配效率而设计的一种内存管理机制,本文主要介绍了Python内存池机制的实现,具有一定的参考价值,感兴趣的可以了解一下
    2025-04-04
  • Python第三方库之OpenCV库的实用指南

    Python第三方库之OpenCV库的实用指南

    OpenCV(Open Source Computer Vision Library)作为一个强大的计算机视觉库,提供了丰富的图像处理和计算机视觉功能,本文将带领读者使用Python编程语言,通过简单的代码示例,初步掌握OpenCV的图像处理技术,需要的朋友可以参考下
    2024-09-09
  • python web应用程序之Django数据库详解

    python web应用程序之Django数据库详解

    这篇文章主要介绍了python web应用程序之Django数据库,本文通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2024-06-06

最新评论