day02 计算机视觉opencv中使用cv2识别人脸并替换

#使用cv2识别人脸
# 来自于opencv ,computer vision计算机视觉
#需要安装 pip install openc_python 不行指定源
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
# cv2加载图片,默认颜色通道红绿蓝,蓝绿红[:,:,::-1]是为了颜色颠倒
jin = cv2.imread('./jinzhengen.jpg')[:,:,::-1]#读取图片
cv2.imshow('frame',jin)#显示图片 
                    #shift + tab 查看imshow的帮助api 参数 图片名 数组

cv2.waitKey(0) #通过键盘关闭窗口

-1

plt.imshow(jin)#导入绘图工具 显示图片 
<matplotlib.image.AxesImage at 0x212126a0a58>

这里写图片描述

dog = plt.imread('./d.jpg')#导入图片并显示
plt.imshow(dog)
<matplotlib.image.AxesImage at 0x21209d3a320>

png

#检测脸 传入算法
face_detector = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
plt.imshow(jin)
<matplotlib.image.AxesImage at 0x21209de34e0>

png

face_zone = face_detector.detectMultiScale(jin)#缩放显示人脸区域
# 前两个数据是人脸左上角的坐标
# 后两个数,宽度和高度
face_zone
array([[226,  75,  73,  73]], dtype=int32)
plt.imshow(dog)
<matplotlib.image.AxesImage at 0x21215835518>

png

dog_head = dog[20:450,250:680] #把狗狗的头这个区域取出来
plt.imshow(dog_head)
<matplotlib.image.AxesImage at 0x21216412cf8>

png

dog_head2 = cv2.resize(dog_head,(73,73))
plt.imshow(dog_head2)
<matplotlib.image.AxesImage at 0x212164b5d68>

png

plt.imshow(jin)
<matplotlib.image.AxesImage at 0x2121650ada0>

png

for x,y,w,h in face_zone:
    #x横座标 y纵座标 对于图片宽度是第二维代表列 高度是第一维代表行
    jin[y:y+h,x:x+w] = dog_head2

plt.imshow(jin)
<matplotlib.image.AxesImage at 0x2121656a3c8>

png

#以上图片是正方形 现在把它变成圆形
import numpy as np
jin = plt.imread('./jinzhengen.jpg')#重新加载图片

jin = jin.copy()#复制

for x,y,w,h in face_zone:

#     给定条件,圆的方程
#     半径,73/2
    r = int(w/2)
    cirle_point = np.array([w/2,h/2])
    for i in range(w):
        for j in range(h):
            #圆的方程圆心(a,b)方程(X-A)**2+(Y-B)**2=R**2
            #(i - cirle_point[0])**2 + (j - cirle_point[1])**2 < r**2  圆里面的点
            #(i - cirle_point[0])**2/1.5 + (j - cirle_point[1])**2 < r**2  椭圆
            if (i - cirle_point[0])**2 + (j - cirle_point[1])**2 < r**2:
                jin[y+i,x+j] = dog_head2[i,j]

plt.imshow(jin)
<matplotlib.image.AxesImage at 0x21216d9d898>

png

猜你喜欢

转载自blog.csdn.net/weixin_41853490/article/details/81174988