【无敌Python 】增强视频画质,就应该这么做

原理

我想知道你们小时候是不是经常玩这个?

[En]

I wonder if you used to play this when you were kids?

这就是最早的动画是如何形成的。我记得小时候有这样的小书可以卖。

[En]

This is how the earliest animation was formed. I remember that there were such small books to sell when I was a child.

事实上,视频的原理是相同的。一个视频是由许多图片组成的,而一张图片就是一个框架。因此,我们需要提高视频的质量,这些视频可以拆分成两对。

[En]

In fact, the principle of video is the same. A video is made up of many pictures, and a picture is a frame. So we need to enhance the quality of the video, which can be split into pairs.

操纵每一帧的图片,这是我们前面描述的。

[En]

Manipulate the picture of each frame, which we described earlier.

因此,视频质量增强的方法可以分为三个步骤:拆分->处理->合成。

[En]

Therefore, the method of video quality enhancement can be divided into three steps: split-> processing-> synthesis.

【无敌Python 】增强视频画质,就应该这么做

; 拆分

在我们的第一篇文章中,我们讨论了如何捕获摄像头的视频流,以及如何读取和播放视频。无论哪种方式,我们都是通过框架运作的。所以

[En]

In our first article, we talked about how to capture the video stream of the camera, and how to read the video and play it. Either way, we operate through frames. So

这里所谓的拆分就是获取我们捕获或读取的视频流的每一帧。

[En]

The so-called split here is to obtain every frame of the video stream that we have captured or read.

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

就这么简单,我们可以得到视频的每一帧。

[En]

It’s that simple, and we can get every frame of the video.

处理

在我们得到视频的一帧后,我们必须将该帧转换为我们可以处理的格式。当我们之前介绍如何增强画面质量时,

[En]

After we get a frame of the video, we have to convert the frame into a format that we can handle. When we introduced how to enhance the quality of the picture earlier,

候,使用的是 ImageEnhance 这个函数的相关方法,这个函数是 PIL 图像处理库里面的,所以我们必须把我们每一帧的图片读取

成 PIL 可以处理的格式:

image = Image.fromarray(np.uint8(img1))

读完图片后,我们可以使用上一篇文章中讨论的代码来增强图像质量:

[En]

After reading the image, we can enhance the image quality, using the code we talked about in the last article:

【无敌Python 】增强视频画质,就应该这么做
图像处理
python学习交流Q群:906715085####
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

合成

经过图像处理后,我们需要合成图像的每一帧,以获得最终的视频:

[En]

After image processing, we need to synthesize each frame of the image to get our final video:

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') 这个格式。

我没有在这里修改图像的分辨率,只是单独获取原始视频的分辨率,然后在写入视频文件时将原始分辨率作为参数输入。

[En]

I did not modify the resolution of the image here, just get the resolution of the original video separately, and then input the original resolution as a parameter when writing to the video file.

如果您需要修改视频的分辨率,您可以使用以下方法:

[En]

If you need to modify the resolution of the video, you can use the following ways:

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

使用 resize 方法就可以了:

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

总结

我不会在这里发送效果,感兴趣的朋友可以试试。到目前为止,我们的视频质量增强基本实现了,代码还没有

[En]

I will not send out the effect here, and interested friends can try it. So far, our video quality enhancement is basically implemented, and the code is not

这很复杂,这就是它所需要的。但是,如果想要处理令人满意的结果,还需要做出一些努力来调整和优化参数。即使是每一帧。

[En]

It’s complicated, and that’s all it takes. However, if you want to deal with the satisfactory results, you still need to make some efforts to adjust the parameters and optimize them. Even for every frame.

传入的参数都不同,所以需要慢慢研究。如果你认为它不坏,请不要吝啬你的赞扬。

[En]

The parameters passed in are all different, so you need to study it slowly. If you think it’s not bad, please don’t be stingy with your praise.

Original: https://www.cnblogs.com/1234567FENG/p/16393480.html
Author: 蚂蚁爱Python
Title: 【无敌Python 】增强视频画质,就应该这么做

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/499297/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • MySQL — 函数大全 6

    目录 1.结果集的分区中的每一行分配一个连续的整数 ROW_NUMBER() 2.将字符串追加到指定的数量 RPAD() 3.删除尾随空格 RTRIM() 4.将秒转换为&#822…

    Python 2023年10月9日
    084
  • FastAPI(40)- 大型应用程序的项目拆分

    背景 假设要搭建一个测试平台,那么整个项目的 API 数量肯定很多个,他们不可能放在同一个文件中 FastAPI 提供了一个方便的工具来构建应用程序,同时保持所有的灵活性 项目架构…

    Python 2023年8月11日
    0132
  • 表弟打把王者的时间,我就用python写了个自动玩贪吃蛇的程序

    表弟最近放假了天天打王者,作业也不做,气得我差点想给他买三年高考五年模拟了… 算了,血压有点上升,不管他了,先写代码。 ; 实现效果 先看看效果 这比我手动的快多了,而…

    Python 2023年11月9日
    093
  • pytest篇8-pytest之skip/skipif跳过用例

    01 — 引言 上一篇总结了pytest.fixture()中scope参数四种不同纬度的运用,今天我们一起总结一下pytest中用例的跳过。其实前面unittest单元测试框架中…

    Python 2023年9月10日
    099
  • python测试框架之pytest (三)断言

    一、pytest断言Pytest中断言是通过 assert 语句实现的,确定预期值和实际值是否一致。 1.1、pytest等值类型断言 import allure class Te…

    Python 2023年9月9日
    072
  • Pytest fixture及conftest详解

    前言 fixture是在测试函数运行前后,由pytest执行的外壳函数。fixture中的代码可以定制,满足多变的测试需求,包括定义传入测试中的数据集、配置测试前系统的初始状态、为…

    Python 2023年6月12日
    0131
  • NNDL 作业5:卷积与几种常见的卷积核

    作业1 编程实现 图1使用卷积核( 1 − 1 ) \begin{pmatrix} 1 & -1 \end{pmatrix}(1 ​−1 ​),输出特征图 图1使用卷积核(…

    Python 2023年8月23日
    085
  • Python之列表、字典、元组、集合

    Python有4种数据结构,分别是:列表、字典、元组、集合。 列表 列表基本概念 列表由一系列按特定顺序排列的元素组成; 列表是有序集合,也就是说每一个元素都有一个位置,要访问、修…

    Python 2023年9月24日
    060
  • 了解模型开发与部署,看这里!

    11月24日下午15:00顶象第十期业务安全系列大讲堂系列课程《Xintell 模型平台 》正式开讲。 顶象人工智能专家&研发总监无常从模型平台的现状与需求出发,带大家了解…

    Python 2023年10月7日
    079
  • Python自制“超级马里奥”小游戏

    ✅作者简介:华为开发者联盟优质内容创作者、CSDN内容合伙人、GitHub专业技术人员🏆 📃个人主页: 北雨·寒冰~ 的CSDN博客 🔥系列专栏: PyGame 💬个人格言:书山有…

    Python 2023年9月17日
    089
  • 软件架构(六)MVC架构历史

    系列目录 软件架构(一)概览 软件架构(二)编程语言的历史 软件架构(三)名词解释:架构、设计、风格、模式 软件架构(四)单体架构(Monolithic Architecture)…

    Python 2023年10月17日
    0129
  • shardingsphere-jdbc 水平分表学习记录

    放在自己博客里搬过来一份~ 前司使用的是自己魔改的 TDDL,在家时间比较多就尝试学一些业内比较常用的中间件. 这里记录一下学习中遇到的一些问题. 设置的比较简单(太懒了就测试了几…

    Python 2023年10月16日
    069
  • Python基础教程(七)matplotlib–plot介绍

    编程字典Pandas教程 http://codingdict.com/article/8270清华计算机博士带你学-Python金融量化分析 https://www.bilibil…

    Python 2023年9月3日
    095
  • 一招解决开发环境问题——远程容器开发指南

    前言 使用C++作为主要开发语言的程序猿们应该会认同搭建开发环境是一件烦人的事情。为了编译一个程序不仅需要下载各种依赖包,还可能面临本地系统不兼容、编译器版本不一致、包版本冲突等各…

    Python 2023年9月16日
    0104
  • pythonslice_shift_Pandas 解决dataframe的一列进行向下顺移问题

    最近做比赛,有时候需要造出新的特征,而这次遇到的问题是将一列数据往下顺移一位。同时将开头缺失的那一个数据用其他方式填充。 df[‘feature’].shi…

    Python 2023年8月7日
    074
  • 周末自制了一个批量图片水印添加器!

    前段时间写了个比较简单的批量水印添加的python实现方式,将某个文件夹下面的图片全部添加上水印。 【阅读全文】 今天正好有时间就做了一个UI应用的封装,这样不需要知道python…

    Python 2023年10月31日
    0109
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球