python练习4 视频与图像处理

该篇博客详细介绍了如何使用Python的OpenCV库及ffmpeg工具处理视频,包括将视频拆分为图片帧以及将处理后的帧重新组合成视频。同时,还讲解了PIL库在图像处理中的应用,如转换灰度图、格式转换、图像裁剪旋转、直方图绘制以及高斯模糊等操作。这些技巧在图像和视频处理中非常实用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

语言: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()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值