python 视频和图片转换 视频压缩 图片降低分辨率 图像处理

python 做视频后期

    • 单个视频转图片
    • 所有图片转视频
    • 视频压缩 - ffmpeg
    • 图片降低分辨率
    • 图像处理

这是最近无聊的想法,对视频进行处理,其实也就是对图片的处理。

对视频进行后期处理,思路就是,视频转图片,然后对图片进行处理,再把图片转视频。

图片处理的多么奇怪,视频就多么奇怪,我当时想了想觉得挺好玩就做了玩玩。

视频可能很大,对视频处理要花好长时间,所以还进行了视频压缩等操作。

用到的代码如下。

单个视频转图片

'''
提取单个视频的所有帧
'''
import cv2
import numpy as np
def save_image(image,addr,num):#存储的图片路径address=addr+str(num)+'.jpg'#存储图片cv2.imwrite(address,image)
#读入视频
videoCapture=cv2.VideoCapture("./video/snowman.mp4")
#读取视频帧
success,frame=videoCapture.read()
i=0
while success:i=i+1#保存图片save_image(frame,'./img/',i)if success:print('save image:',i)#读取视频帧sucess,frame=videoCapture.read()

所有图片转视频

import cv2
import os
fps = 29#帧速率
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
video_writer = cv2.VideoWriter(filename='./c.mp4', fourcc=fourcc, fps=fps, frameSize=(1080, 1920))  # 图片实际尺寸,不然生成的视频会打不开
for i in range(1,258):p = iif os.path.exists('./img/'+str(p)+'.jpg'):  #判断图片是否存在img = cv2.imread(filename='./img/'+str(p)+'.jpg')#cv2.waitKey(100)video_writer.write(img)
video_writer.release()

视频压缩 - ffmpeg

在命令行输入:python ZIP.py ./ c.mp4 c2.mp4
在这里插入图片描述


import sys
import os
import zlib
import threading
import platform
from PIL import Image# python press.py ./ 12.mp4 23.mp4
# python 文件名  路径 要压缩的文件 压缩之后的文件名# python ZIP.py ./ c.mp4 c2.mp4
#filePath = "./"
#inputName = "c.mp4"
#outName = "c2.mp4"class Compress_Pic_or_Video(object):def __init__(self,filePath,inputName,outName=""):self.filePath = filePath  #文件地址self.inputName = inputName  #输入的文件名字self.outName = outName  #输出的文件名字self.system_ = platform.platform().split("-",1)[0]if  self.system_ ==  "Windows":self.filePath = (self.filePath + "\\") if self.filePath.rsplit("\\",1)[-1] else self.filePathelif self.system_ == "Linux":self.filePath = (self.filePath + "/") if self.filePath.rsplit("/",1)[-1] else self.filePathself.fileInputPath = self.filePath + inputNameself.fileOutPath = self.filePath + outName@propertydef is_video(self):videoSuffixSet = {"WMV","ASF","ASX","RM","RMVB","MP4","3GP","MOV","M4V","AVI","DAT","MKV","FIV","VOB"}suffix = self.fileInputPath.rsplit(".",1)[-1].upper()if suffix in videoSuffixSet:return Trueelse:return Falsedef SaveVideo(self):fpsize = os.path.getsize(self.fileInputPath) / 1024if fpsize >= 150.0: #大于150KB的视频需要压缩if self.outName:compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath,self.fileOutPath)isRun = os.system(compress)else:compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath, self.fileInputPath)isRun = os.system(compress)if isRun != 0:return (isRun,"没有安装ffmpeg")return Trueelse:return Truedef Compress_Video(self):# 异步保存打开下面的代码,注释同步保存的代码# thr = threading.Thread(target=self.SaveVideo)# thr.start()#下面为同步代码fpsize = os.path.getsize(self.fileInputPath) / 1024if fpsize >= 150.0:  # 大于150KB的视频需要压缩compress = "ffmpeg -i {} -r 10 -pix_fmt yuv420p -vcodec libx264 -preset veryslow -profile:v baseline  -crf 23 -acodec aac -b:a 32k -strict -5 {}".format(self.fileInputPath, self.fileOutPath)isRun = os.system(compress)if isRun != 0:return (isRun, "没有安装ffmpeg")return Trueelse:return Trueif __name__ == "__main__":b = sys.argv[1:]	#测试压缩savevideo = Compress_Pic_or_Video(b[0],b[1],b[2])print(savevideo.Compress_Video())

图片降低分辨率

#coding=utf-8
import os  #打开文件时需要
from PIL import Image
import reStart_path='C:/Users/jym/PycharmProjects/video2picture/img/'
end_path='C:/Users/jym/PycharmProjects/video2picture/img2/'
new_width=281
new_depth=500
list=os.listdir(Start_path)
#print list
count=0
for pic in list:path=Start_path+picim=Image.open(path)w,h=im.sizeh_new=new_depthw_new=new_widthcount=count+1out = im.resize((w_new,h_new),Image.ANTIALIAS)#new_pic=re.sub(pic[:-4],pic[:-4]+'_new',pic)new_pic=picnew_path=end_path+new_picout.save(new_path)count=str(count)

图像处理

import cv2
import os
import numpy as np
from matplotlib import pyplot as pltdef read_path(file_pathname):#遍历该目录下的所有图片文件for filename in os.listdir(file_pathname):print(filename)img = cv2.imread(file_pathname+'/'+filename)#插入图像处理代码cv2.imwrite('./img3/'+"/"+filename,img)#注意*处如果包含家目录(home)不能写成~符号代替
#必须要写成"/home"的格式,否则会报错说找不到对应的目录
#读取的目录
read_path('./img2/')
#print(os.getcwd())

这里面图像处理代码根据自己需要进行编写,比如下面。

import cv2
import os
import numpy as np
from matplotlib import pyplot as pltdef gasuss_noise(image, mean=0, var=0.001):'''添加高斯噪声mean : 均值var : 方差'''image = np.array(image / 255, dtype=float)noise = np.random.normal(mean, var ** 0.5, image.shape)out = image + noiseif out.min() < 0:low_clip = -1.else:low_clip = 0.out = np.clip(out, low_clip, 1.0)out = np.uint8(out * 255)return outdef read_path(file_pathname):#遍历该目录下的所有图片文件for filename in os.listdir(file_pathname):print(filename)img = cv2.imread(file_pathname+'/'+filename)#out2 = cv2.erode(img,None,iterations=3)hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)# 分别设置HSV颜色空间中,红色、黄色、蓝色、绿色的阈值lower_red = np.array([0, 43, 46])upper_red = np.array([10, 255, 255])lower_yellow = np.array([26, 43, 46])upper_yellow = np.array([34, 255, 255])lower_blue = np.array([100, 43, 46])upper_blue = np.array([124, 255, 255])lower_green = np.array([35, 43, 46])upper_green = np.array([77, 255, 255])# 使用inRange函数获取图像中目标颜色的索引mask_red = cv2.inRange(hsv, lower_red, upper_red)mask_blue = cv2.inRange(hsv, lower_blue, upper_blue)mask_green = cv2.inRange(hsv, lower_green, upper_green)mask_yellow = cv2.inRange(hsv, lower_yellow, upper_yellow)img_mask = np.copy(img)color_1 = [128, 9, 21]color_2 = [50, 14, 77]color_3 = [61, 154, 124]color_4 = [59, 170, 246]# 给目标像素赋值img_mask[mask_red != 0] = color_1img_mask[mask_blue != 0] = color_2img_mask[mask_green != 0] = color_3img_mask[mask_yellow != 0] = color_4#out2 = gasuss_noise(img, mean=0, var=0.01)####change to gray#(下面第一行是将RGB转成单通道灰度图,第二步是将单通道灰度图转成3通道灰度图)#img=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)#image_np=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)#####save figurecv2.imwrite('./img3/'+"/"+filename,img_mask)#注意*处如果包含家目录(home)不能写成~符号代替
#必须要写成"/home"的格式,否则会报错说找不到对应的目录
#读取的目录
read_path('./img2/')
#print(os.getcwd())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560259.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

矩阵论复习-过渡矩阵、生成子空间、表示矩阵、度量矩阵、酉空间、内积

一小部分矩阵论的整理复习&#xff0c;这个由于公式输入的太麻烦了&#xff0c;所以就弄了一点。后面直接看着书复习的。 矩阵论复习线性空间基与维数基变换公式、过渡矩阵、坐标变换公式线性子空间齐次方程组的解空间特征子空间生成子空间交空间和空间维数定理直和线性映射线性…

使用Anaconda3安装pytorch、paddle环境并在pycharm里面进行环境测试

安装完Anaconda后&#xff0c;也配好了框架的环境&#xff0c;接下来就需要在pycharm里面写代码了。 Anaconda里面的一些命令 1.新建环境&#xff0c;pytorch 是自己命的名&#xff08;新建虚拟环境&#xff09;conda create -n pytorch python3.82.看conda 环境中&#xff0…

Anaconda配置的环境里面增加第三方库的方法

用Anaconda3配置了paddle框架的环境&#xff0c;但是环境里面没有项目代码用到的一些包&#xff0c;比如matplotlib。 在Anaconda的Powershall里面输入如下内容可以增加一些包&#xff1a; 有三句话&#xff0c;第一句是看在conda 环境中&#xff0c;创建的所有环境。 第二句话…

python numpy常用操作、Numpy 多维数组、矩阵相乘、矩阵乘以向量

python numpy常用操作 Numpy基本操作 # 导入numpy import numpy as np # 生成numpy数组 x np.array([1.0, 2.0, 3.0]) print(x) # [1. 2. 3.] print(type(x)) # <class numpy.ndarray> # Numpy的算术运算 x np.array([1.0, 2.0, 3.0]) y np.array([2.0, 4.0, 6.0]…

【数据结构】——期末复习题题库(1)

&#x1f383;个人专栏&#xff1a; &#x1f42c; 算法设计与分析&#xff1a;算法设计与分析_IT闫的博客-CSDN博客 &#x1f433;Java基础&#xff1a;Java基础_IT闫的博客-CSDN博客 &#x1f40b;c语言&#xff1a;c语言_IT闫的博客-CSDN博客 &#x1f41f;MySQL&#xff1a…

感知机实现与、或、与非门和异或门

机器学习-感知机【perceptron】what is 感知机单层感知机运用实例多层感知机what is 感知机 感知机接收多个输入信号&#xff0c;输出一个信号。 接收两个信号的感知机&#xff0c;如下图&#xff1a; x1与x2是输入信号&#xff1b;y是输出信号&#xff1b; w1与w2是权重。圆…

神经网络的激活函数、并通过python实现激活函数

神经网络的激活函数、并通过python实现what is 激活函数激活函数的python实现python实现阶跃函数python实现sigmoid函数python实现ReLU函数激活函数的特点what is 激活函数 感知机的网络结构如下&#xff1a; 左图中&#xff0c;偏置b没有被画出来&#xff0c;如果要表示出b&…

下载MNIST数据集并使用python将数据转换成NumPy数组(源码解析)

下载MNIST数据集并使用python将数据转换成NumPy数组首先来分析init_mnist函数接下来继续分析load_mnist函数实现数据集转换的python脚本的代码显示MNIST图像并确认数据下载MNIST数据集并将数据转换成NumPy数组的Python脚本里面最重要的就是load_mnist函数&#xff0c;其他项目想…

使用python构建三层神经网络、softmax函数

【机器学习】使用python手写三层神经网络输入层到第一层的传递表示第一层到第二层的传递表示第二层到第三层的传递表示全过程传递表示代码输入层到第一层的传递表示 首先看输入层到第一层的第一个神经元的信号传递过程&#xff1a; 可以用数学式子表示第一层的第一个神经元的值…

使用python对数据集进行批处理

【机器学习】使用python对数据集进行批处理 只输入一张图像数据过程和一次性处理100张图像数据过程中&#xff0c;数组形状变换如下图所示&#xff1a; 这些数组形状可以在代码中输出出来&#xff1a; def get_data():(x_train, t_train), (x_test, t_test) load_mnist(norm…

损失函数、python实现均方误差、交叉熵误差函数、mini-batch的损失函数

损失函数what is 损失函数均方误差交叉熵误差计算mini-batch学习的损失函数why 损失函数what is 损失函数 神经网络学习目标是找到各层合适的权重参数w和偏置b&#xff0c;使得最终的输出结果能够与实际结果更加接近。那神经网络的这些权重参数是如何得到的&#xff1a;靠损失…

梯度、梯度法、python实现神经网络的梯度计算

【机器学习】梯度、梯度法、python实现神经网络的梯度计算一、python实现求导的代码&#xff1a;二、what is 梯度三、使用梯度法寻找神经网络的最优参数四、神经网络的梯度计算一、python实现求导的代码&#xff1a; 导数含义也就是&#xff1a;变量x一个微小的变化将导致f(x…

使用反向传播算法计算参数的梯度并用python实现加法和乘法节点的反向传播

使用反向传播算法计算参数的梯度并用python实现加法和乘法节点的反向传播一、what is 反向传播二、乘法节点的反向传播三、加法节点的反向传播四、加法层和乘法层混合应用一、what is 反向传播 误差反向传播法是一种高效计算权重参数的梯度的方法。所谓的反向传播&#xff0c;…

结合反向传播算法使用python实现神经网络的ReLU、Sigmoid、Affine、Softmax-with-Loss层

结合反向传播算法使用python实现神经网络的ReLU、Sigmoid激活函数层 这里写目录标题一、ReLU层的实现二、Sigmoid层的实现三、实现神经网络的Affine层四、Softmax-with-Loss层实现一、ReLU层的实现 正向传播时的输入大于0&#xff0c;则反向传播会将上游的值原封不动地传给下游…

神经网络的SGD、Momentum、AdaGrad、Adam最优化方法及其python实现

神经网络的SGD、Momentum、AdaGrad、Adam最优化方法及其python实现一、SGD二、Momentum-动量三、AdaGrad四、Adam一、SGD 右边的值更新左边的值&#xff0c;每次更新朝着梯度方向前进一小步。 class SGD:"""随机梯度下降法&#xff08;Stochastic Gradient Des…

关于神经网络权重初始值的设置的研究

关于神经网络权重初始值的设置的研究一、权重初始值二、权重初始值会影响隐藏层的激活值分布三、Xavier初始值四、He初始值五、基于MNIST数据集的权重初始值的比较一、权重初始值 权值衰减—抑制过拟合、提高泛化能力。 所谓权值衰减&#xff0c;即&#xff0c;以减小权重参数…

使用权值衰减算法解决神经网络过拟合问题、python实现

使用权值衰减算法解决神经网络过拟合问题、python实现一、what is 过拟合二、过拟合原因三、权值衰减四、实验验证4.1制造过拟合现象4.2使用权值衰减抑制过拟合一、what is 过拟合 过拟合指只能拟合训练数据&#xff0c;但不能很好拟合不包含在训练数据中的其他数据的状态。 …

解决神经网络过拟合问题—Dropout方法、python实现

解决神经网络过拟合问题—Dropout方法一、what is Dropout&#xff1f;如何实现&#xff1f;二、使用和不使用Dropout的训练结果对比一、what is Dropout&#xff1f;如何实现&#xff1f; 如果网络模型复杂&#xff0c;L2范数权值衰减方法就难以对付过拟合。这种情况下&#…

神经网络如何调参、超参数的最优化方法、python实现

神经网络如何调参、超参数的最优化方法、python实现一、what is 超参数二、超参数优化实验一、what is 超参数 超参数是什么&#xff0c;其实就是&#xff0c;各层神经元数量、batch大小、学习率等人为设定的一些数。 数据集分为训练数据、测试数据、验证数据。 用测试数据评…

卷积神经网络的整体结构、卷积层、池化、python实现

卷积神经网络的整体结构、卷积层、池化、python实现一、整体结构二、卷积层三、池化层四、python实现卷积层、池化层一、整体结构 神经网络相邻层所有神经元之间都有连接&#xff0c;称为全连接。前面用Affine层实现了全连接。 举个例子 全连接神经网络结构&#xff1a; 卷积…