语言:python
依赖包:python-opencv
借助工具:ffmpeg
一、视频处理
1.将视频打散为图片
import os
import cv2
import subprocess
os.chdir('D:/python/Ads2021')
v_path='D:/python/Ads2021/ghz.mp4'
image_save='D:/python/Ads2021/pic' #存储图片命名
cap=cv2.VideoCapture(v_path) #读取视频帧
frame_count=cap.get(cv2.CAP_PROP_FRAME_COUNT)
for i in range(int(frame_count)):
_,img=cap.read()
#img=cv2.cvtColor(img,cv2.cv2.COLOR_BGR2GRAY) 暂时先不转换为灰度图像
cv2.imwrite('D:/python/Ads2021/pic/image{}.jpg'.format(i),img)
2.将处理后的帧合并
ffmpeg -f image2 -i ./pic/image%d.jpg -r 24 output.mp4
便生成了新的视频
ffplay ghz.mp4 直接播放视频
二、 图像处理
首先,安装PIL:Python Image library
·图像基本操作:缩放、裁剪、旋转、色彩转换
·PIL的分支:pillow
1.打开图像文件,先查看/修改当前目录
from PIL import Image
import os
print(os.getcwd()) #获取当前工作的路径
os.chdir('D:\python\Ads2021')
print(os.getcwd())
im = Image.open('D:\python\Ads2021\girl.png')
print(im.format,im.size,im.mode)
im.show() #打开图片
‘
2.PIL用法
①转化为灰度图
1和L的区别
1:黑白图
L:灰度图
from PIL import Image
import os
import matplotlib.pyplot as plt
print(os.getcwd()) #获取当前工作的路径
os.chdir('D:\python\Ads2021')
print(os.getcwd())
im = Image.open('D:\python\Ads2021\girl.png').convert("L")
print(im.format,im.size,im.mode)
#im.show()
plt.imshow(im)
plt.title("Image Processing@CUC") #图像标题
plt.axis("off")
plt.show
plt显示图像默认三通道,添加参数cmap="gray"即可,plt.imshow(im,cmap="gray")
②图像格式转换
将单张图片进行格式转换:
image1=Image.open('cjh.jpg')
image1.save('cjh.png')
批量转换:
from PIL import Image
import os
filelist=os.listdir(os.getcwd())
print(filelist)
for infile in filelist:
filename=str(infile)
print(filename)
print(filename.find('.jpg')) #在当前目录下查找以".jpg"结尾的文件名
isimg=filename.find('.jpg')
if isimg>=0:
outfile=infile[0:isimg]+".png"
if infile!=outfile:
try:
Image.open(infile).save(outfile) #将jpg图片另存为png图片
except IOError:
print("Cannot convert",infile)
③取一个图像的局部+旋转+粘贴
from PIL import Image
import os
import matplotlib.pyplot as plt
pil=Image.open('D:\python\Ads2021\girl.png')
box=(200,100,400,200) #选取局部
region=pil.crop(box) #截取
region=region.transpose(Image.ROTATE_180) #翻转
pil.paste(region,box) #粘贴
plt.imshow(pil)
plt.axis('off')
plt.show()
④图像轮廓和直方图
from PIL import Image
from pylab import*
#读取图像到数组
img=array(Image.open('D:\python\Ads2021\girl.png').convert('L'))
#新建一个可视区
figure()
gray()
contour(im,origin='image')
axis('equal')
axis('off')
figure()
hist(img.flatten(),128)
show()
from PIL import Image
from numpy import*
import matplotlib.pyplot as plt
img=array(Image.open('D:\python\Ads2021\girl.png').convert('L'))
hist(img.flatten(),32)
plt.figure('Image')
plt.imshow(img)
plt.axis('off')
plt.show()
⑤高斯模糊
from PIL import Image
from numpy import*
from scipy.ndimage import filters
import matplotlib.pyplot as plt
im=array(Image.open('D:\python\Ads2021\girl.png').convert('L'))
im2=filters.gaussian_filter(im,5)
plt.figure()
plt.imshow(im)
plt.axis('off')
plt.figure()
plt.imshow(im2)
plt.axis('off')
plt.show()