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时间模块中的datetime模块
Jan 13 Python
Python处理PDF及生成多层PDF实例代码
Apr 24 Python
Python反射和内置方法重写操作详解
Aug 27 Python
详解Python中is和==的区别
Mar 21 Python
python爬虫租房信息在地图上显示的方法
May 13 Python
利用 Flask 动态展示 Pyecharts 图表数据方法小结
Sep 04 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
Python连接SQLite数据库并进行增册改查操作方法详解
Feb 18 Python
Python decorator拦截器代码实例解析
Apr 04 Python
基于Python爬取fofa网页端数据过程解析
Jul 13 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 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
php实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
smarty模板引擎中自定义函数的方法
2015/01/22 PHP
用js实现计算代码行数的简单方法附代码
2007/08/13 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
基于JQuery的访问WebService的代码(可访问Java[Xfire])
2010/11/19 Javascript
JavaScript中的eval()函数使用介绍
2014/12/31 Javascript
使用js画图之圆、弧、扇形
2015/01/12 Javascript
jquery+html5烂漫爱心表白动画代码分享
2015/08/24 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
js 用于检测类数组对象的函数方法
2017/05/02 Javascript
ES6知识点整理之Proxy的应用实例详解
2019/04/16 Javascript
vue项目出现页面空白的解决方案
2019/10/31 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
从源码角度来回答keep-alive组件的缓存原理
2021/01/18 Javascript
[02:32]DOTA2英雄基础教程 祸乱之源
2013/12/23 DOTA
python实现倒计时的示例
2014/02/14 Python
python用字典统计单词或汉字词个数示例
2014/04/22 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
tensorflow实现softma识别MNIST
2018/03/12 Python
python selenium 弹出框处理的实现
2019/02/26 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
python实现可下载音乐的音乐播放器
2020/02/25 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
英国领先的珍珠首饰品牌:Orchira
2016/09/11 全球购物
Hush Puppies澳大利亚官网:舒适的男女休闲和正装鞋
2019/08/24 全球购物
瑞士男士时尚网上商店:Babista
2020/05/14 全球购物
如何选择使用结构还是类
2014/05/30 面试题
应届大学生自荐信格式
2013/09/21 职场文书
最新自我评价范文
2013/11/16 职场文书
党校培训思想汇报
2013/12/30 职场文书
化学工程专业求职信
2014/08/10 职场文书
中学综治宣传月活动总结
2015/05/07 职场文书
领导视察通讯稿
2015/07/18 职场文书
受欢迎的自荐信,就这么写!
2019/04/19 职场文书