图片与视频的处理

1.首先需要在mac上安装ffmpeg(参考社区的安装教程)

需要先安装drew 然后再安装ffmpeg

2.使用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()

3.使用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()

得到:

 3.利用安装的ffmpeg进行视频格式转换

ffmpeg -i /Users/tiankaichun/Desktop/ghz.mp4 -b:v 640k ghz.flv

4.利用pillow进行图像处理

首先安装pillow包:

pip install pillow

生成灰度图:

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()

复制图像的部分区域进行粘贴:

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()

得到:

 5.使用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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值