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抓取框架 Scrapy的架构
Aug 12 Python
Python脚本获取操作系统版本信息
Dec 17 Python
详解Python 模拟实现生产者消费者模式的实例
Aug 10 Python
Python实现对一个函数应用多个装饰器的方法示例
Feb 09 Python
Python输入二维数组方法
Apr 13 Python
python:接口间数据传递与调用方法
Dec 17 Python
Python代码打开本地.mp4格式文件的方法
Jan 03 Python
python matplotlib实现双Y轴的实例
Feb 12 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
May 16 Python
python字符串中匹配数字的正则表达式
Jul 03 Python
对Python _取log的几种方式小结
Jul 25 Python
如何利用python web框架做文件流下载的实现示例
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
php 数组的创建、调用和更新实现代码
2009/03/09 PHP
Laravel项目中timeAgo字段语言转换的改善方法示例
2019/09/16 PHP
javascript innerText和innerHtml应用
2010/01/28 Javascript
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
JavaScript中getUTCSeconds()方法的使用详解
2015/06/11 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
node.js 中间件express-session使用详解
2017/05/20 Javascript
AngularJS 打开新的标签页实现代码
2017/09/07 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
JS实现基于拖拽改变物体大小的方法
2018/01/23 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
详解vue的数据劫持以及操作数组的坑
2019/04/18 Javascript
Vue 401配合Vuex防止多次弹框的案例
2020/11/11 Javascript
利用Vue实现简易播放器的完整代码
2020/12/30 Vue.js
python使用PyGame模块播放声音的方法
2015/05/20 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
python矩阵/字典实现最短路径算法
2019/01/17 Python
Python实现的合并两个有序数组算法示例
2019/03/04 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
Python命名空间namespace及作用域原理解析
2020/06/05 Python
详解python tkinter包获取本地绝对路径(以获取图片并展示)
2020/09/04 Python
Pycharm同步远程服务器调试的方法步骤
2020/11/04 Python
美国网上鞋子零售商:Dr. Scholl’s Shoes
2017/11/17 全球购物
美国牛仔品牌:True Religion
2018/11/16 全球购物
日本航空官方网站:JAL
2019/06/19 全球购物
信用社竞聘演讲稿
2014/05/16 职场文书
意外伤害赔偿协议书
2014/09/16 职场文书
2014年“四风”问题个人整改措施
2014/09/17 职场文书
村长党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
锦旗赠语
2015/06/23 职场文书
劳动模范获奖感言
2015/07/31 职场文书
高一地理教学工作总结
2015/08/12 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书