Python 视频画质增强


Posted in Python onApril 28, 2022

前言

前面通过文章 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 相关文章推荐
python实现的用于搜索文件并进行内容替换的类实例
Jun 28 Python
Python实现信用卡系统(支持购物、转账、存取钱)
Jun 24 Python
Python解析excel文件存入sqlite数据库的方法
Nov 15 Python
tensorflow1.0学习之模型的保存与恢复(Saver)
Apr 23 Python
Tensorflow 实现修改张量特定元素的值方法
Jul 30 Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 Python
Python(PyS60)实现简单语音整点报时
Nov 18 Python
关于多元线性回归分析——Python&SPSS
Feb 24 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
VScode连接远程服务器上的jupyter notebook的实现
Apr 23 Python
DRF使用simple JWT身份验证的实现
Jan 14 Python
python内置进制转换函数的操作
Jun 02 Python
python 单机五子棋对战游戏
python井字棋游戏实现人机对战
Apr 28 #Python
Python开发五子棋小游戏
Python简易开发之制作计算器
Apr 28 #Python
Python实现对齐打印 format函数的用法
Apr 28 #Python
python实现简单的三子棋游戏
Apr 28 #Python
Python内置类型集合set和frozenset的使用详解
You might like
一个程序下载的管理程序(四)
2006/10/09 PHP
php 购物车实例(申精)
2009/05/11 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
学习php设计模式 php实现状态模式
2015/12/07 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
点击按钮自动加关注的代码(sina微博/QQ空间/人人网/腾讯微博)
2014/01/02 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
webpack 从指定入口文件中提取公共文件的方法
2018/11/13 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
Python迭代用法实例教程
2014/09/08 Python
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
使用Python来编写HTTP服务器的超级指南
2016/02/18 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
基于Python对数据shape的常见操作详解
2018/12/25 Python
python 叠加等边三角形的绘制的实现
2019/08/14 Python
Django3.0 异步通信初体验(小结)
2019/12/04 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
python实现图像外边界跟踪操作
2020/07/13 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
canvas粒子动画背景的实现示例
2018/09/03 HTML / CSS
Monica Vinader官网:英国轻奢珠宝品牌
2020/02/05 全球购物
澳大利亚人信任的清洁平台,您的私人管家:Jarvis
2020/12/25 全球购物
网络工程与软件技术毕业生自荐信
2013/09/24 职场文书
护士的自我鉴定
2014/02/07 职场文书
大学生个人求职口试自我评价
2014/02/16 职场文书
办理信用卡工作证明
2014/09/30 职场文书
2014年卫生院工作总结
2014/12/03 职场文书
小学生心理健康活动总结
2015/05/08 职场文书
又涨知识了,自律到底多重要?
2019/06/27 职场文书
python3.9之你应该知道的新特性详解
2021/04/29 Python
python基础之模块的导入
2021/10/24 Python
华为HarmonyOS3.0强在哪? 看看鸿蒙3.0这7个小功能
2023/01/09 数码科技