第四节课 视频&图像处理
2021/10/14 23:16:47
本文主要是介绍第四节课 视频&图像处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
1.人脸识别和图像处理相结合——将图片中的人脸高斯模糊
首先需要使用dlib工具进行人脸识别并输出人脸坐标
import cv2 import dlib import numpy as np import matplotlib.pyplot as plt path="girl.png" img=cv2.imread(path) gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) detector=dlib.get_frontal_face_detector() predictor=dlib.shape_predictor('/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/face_recognition_models/models/shape_predictor_68_face_landmarks.dat') # 人脸数rects rects = detector(img, 0) for i in range(len(rects)): landmarks = np.matrix([[p.x, p.y] for p in predictor(path, rects[i]).parts()]) for idx, point in enumerate(landmarks): # 81点的坐标 pos = (point[0, 0], point[0, 1]) # 利用cv2.circle给每个特征点画一个圈,共81个 cv2.circle(path, pos, 2, color=(0, 255, 0)) # 利用cv2.putText输出1-81 font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(path, str(idx + 1), pos, font, 0.3, (0, 0, 255), 1, cv2.LINE_AA) print("index=" + str(idx+1) + " x=" + str(pos[0]) + " y=" + str(pos[1])) plt.imshow(path) plt.show() if cv2.waitKey(1) & 0xFF == ord('q'): print("q pressed") cap.release() cv2.destroyAllWindows()
输出结果:
然后使用PIL进行局部高斯模糊
在高斯模糊区域输入上一个代码生成的坐标
from PIL import Image, ImageFilter class MyGaussianBlur(ImageFilter.Filter): name = "GaussianBlur" def __init__(self, radius=2, bounds=None): self.radius = radius self.bounds = bounds def filter(self, image): if self.bounds: clips = image.crop(self.bounds).gaussian_blur(self.radius) image.paste(clips, self.bounds) return image else: return image.gaussian_blur(self.radius) bounds = (228,228,377,377) image = Image.open('girl.png') image = image.filter(MyGaussianBlur(radius=29, bounds=bounds)) plt.imshow(image)# 绘制图像image plt.axis('off') plt.show()
结果:
2.ffmpeg的应用
安装ffmpeg:首先要安装drew 然后再安装ffmpeg
转换视频格式
ffmpeg -i /Users/tiankaichun/Desktop/ghz.mp4 -b:v 640k ghz.flv
使用该命令将mp4格式转换为640kbps的flv格式
这里要注意命令的空格等格式,打错了很可能会失败
视频将会保存在tiankaichun这个文件夹下
3.pillow图像处理
安装pillow包:pip install pillow
(1)生成灰度图
from PIL import Image import os import matplotlib.pyplot as plt im=Image.open('girl.png').convert("L")#灰度图 print(im.format,im.size,im.mode) plt.imshow(im) plt.title("girl") plt.axis('off') plt.show()
(2)复制图像中的区域并进行粘贴
import matplotlib.pyplot as plt from PIL import Image image = Image.open('IMG_3634.JPG') # 打开图像 box = (1980,300,3000,800) # 截取区域 (x0, y0, x1, y1) image_crop = image.crop(box) # 按指定截取区域对图像进行截取复制 image_crop.save("image_crop.jpg") # 保存 image_crop = Image.open("image_crop.jpg") plt.subplot(2,1,1) plt.imshow(image)# 绘制图像image plt.axis('off') plt.subplot(2,1,2) plt.imshow(image_crop) plt.axis('off') plt.show() image_crop = image_crop.transpose(Image.ROTATE_180) # 转180度 image.paste(image_crop,box) # 将转180度后的图像粘贴到原图像 image.save('image_paste.jpg') image_paste = Image.open("image_paste.jpg") plt.subplot(2,1,2) plt.imshow(image_paste)# 绘制图像image plt.axis('off') plt.show()
box的数值需要一点点更改直到合适位置
最终效果:
4.使用opencv对视频进行处理
把视频按照帧数转换成图片
import os import cv2 v_path='ghz.mp4' image_save='./pic'#需要新建一个名为‘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('./pic/image{}.jpg'.format(i),img)
一定要记得新建文件夹用于保存图片
结果:
这篇关于第四节课 视频&图像处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23Springboot应用的多环境打包入门
- 2024-11-23Springboot应用的生产发布入门教程
- 2024-11-23Python编程入门指南
- 2024-11-23Java创业入门:从零开始的编程之旅
- 2024-11-23Java创业入门:新手必读的Java编程与创业指南
- 2024-11-23Java对接阿里云智能语音服务入门详解
- 2024-11-23Java对接阿里云智能语音服务入门教程
- 2024-11-23JAVA对接阿里云智能语音服务入门教程
- 2024-11-23Java副业入门:初学者的简单教程
- 2024-11-23JAVA副业入门:初学者的实战指南