栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

2021-10-08 python软件设计 小组练习

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2021-10-08 python软件设计 小组练习

1-图像处理与人脸识别的结合应用

        在一些场合公开他人的照片严格来说是触犯了他人肖像权的,然而有的时候我们需要公开图片,而图片上有一些其他人却无意之间也被公开了。为了避免这种现象,我们学习利用face-recognition和高斯模糊为识别到的人脸打上马赛克

图像模糊本质上就是将(灰度)图像 I 和一个高斯核进行卷积操作:

Iσ = I*Gσ (其中 * 表示卷积操作; 是标准差为 σ 的二维高斯核)

SciPy 有用来做滤波操作的 scipy.ndimage.filters 模块,该模块使用快速一维分离的方式来计算卷积。可以像下面这样来使用它:

from PIL import Image
from numpy import *
from scipy.ndimage import filters

im = array(Image.open('empire.jpg').convert('L'))
im2 = filters.gaussian_filter(im,5)

上面 guassian_filter() 函数的最后一个参数表示标准差。

显示了随着 σ 的增加,一幅图像被模糊的程度。σ 越大,处理后的图像细节丢失越多。

如果打算模糊一幅彩色图像,只需简单地对每一个颜色通道进行高斯模糊

选取一张图片进行处理:

import cv2
import os
import face_recognition
from PIL import Image
from numpy import*
from scipy.ndimage import filters
import matplotlib.pyplot as plt

#展示原图
image=plt.imread("D:pythonAds2021girl.jpg")
plt.imshow(image)
plt.axis('off')
plt.show()

#人脸识别
image2=face_recognition.load_image_file("D:pythonAds2021girl.jpg")
face_locations=face_recognition.face_locations(image2)

face_num2=len(face_locations)
org=cv2.imread("D:pythonAds2021girl.jpg")

#获取人脸位置
for i in range(0,face_num2):
    top=face_locations[i][0]
    right=face_locations[i][1]
    bottom=face_locations[i][2]
    left=face_locations[i][3]
    
    start=(left,top)
    end=(right,bottom)
    color=(255,0,0)
    thickness=5
    img=cv2.rectangle(org,start,end,color,thickness)


plt.imshow(img)
plt.axis('off')
plt.show()


pil = Image.open('D:pythonAds2021girl.jpg')
box = start + end   #读取识别到的人脸位置信息
region = pil.crop(box)    # 将识别到的人脸区域复制出来

im = array(region) #将图片转换为数组
im2 = zeros(im.shape)
for i in range(3):
    im2[:,:,i] = filters.gaussian_filter(im[:,:,i],20)  #对每一个颜色通道进行高斯模糊
im2 = uint8(im2)
region = Image.fromarray(im2) #将图像的数据类型转换回去,进行粘贴
 
pil.paste(region,box)
plt.imshow(pil)
plt.axis('off')
plt.show()

2-学会一个新的ffmpeg的命令,用于视音频处理

参考资料:

ffmpeg 常用命令汇总

ffmpeg使用语法:

命令格式:
    ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
    ffmpeg [[options][`-i' input_file]]... {[options] output_file}...
    1、参数选项:
    (1) -an: 去掉音频
    (2) -acodec: 音频选项, 一般后面加copy表示拷贝
    (3) -vcodec:视频选项,一般后面加copy表示拷贝
    2、格式:
    (1) h264: 表示输出的是h264的视频裸流
    (2) mp4: 表示输出的是mp4的视频
    (3)mpegts: 表示ts视频流

①把视频的前30帧转换成一个Animated Gif 

ffmpeg -i ghz.mp4 -vframes 30 -y -f gif ghz.gif

(test.asf是文件名,30为帧数,-y:表示输出文件若存在则直接覆盖,a.gif为生成的文件名)

下面尝试一下将视频的前30帧转换成gif动图

②我们开始想,如果要从视频中间开始截取应该怎么办呢,于是......

参考:FFmpeg续篇:截取视频片段转成GIF动画

ffmpeg -ss 5 -t 1 -i ghz.mp4 -f gif a.gif

将源文件ghz.mp4,从第5秒的位置开始,截取1秒长度的视频转成GIF文件,保存为a.gif。

-ss:从视频的后面的时间开始截取

-t:指定输出的动图的时长,此处为原始视频的1s

-i:输入原始视频文件

 

③问题来了,如果源文件是1080P的高清视频,帧率可能还比较高。为了便于网络分享,GIF文件最好小一点。于是,我们需要使用-s参数来进行图像的缩放,使用-r参数来限制目标文件的帧率。命令行如下:

ffmpeg -ss 5 -t 1 -i ghz.mp4 -s 270x480 -f gif -r 1 ghz3.gif

3-学会2个图像处理的函数

上节课的帖子链接



2021-10-08 python软件设计 练习4


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/324085.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号