目錄 1.前言 2.目標與效果展示 3.下載OpenCV圖形識別庫 4.下載python支持的v2模塊 5.圖片素材 6.代碼 1.前言 編輯 Merry Christmas!今天是2022年12月24日,今晚是平安夜在這裡提前祝大家聖誕節快樂! 大家可能對@官方微信給自己的頭像加上一頂聖誕 ...
目錄
1.前言
Merry Christmas!今天是2022年12月24日,今晚是平安夜在這裡提前祝大家聖誕節快樂!
大家可能對@官方微信給自己的頭像加上一頂聖誕帽的事情記憶尤新,又是一年聖誕節,讓我們用Python製作聖誕帽,給自己的頭像(當然也可以是照片)加個聖誕帽吧 !
這個項目並不是很難,這次主要用到了OpenCV圖形識別庫,那麼話不多說,讓我們開始吧!
2.目標與效果展示
本次項目主要實現將聖誕帽自動加到人臉上的功能。
3.下載OpenCV圖形識別庫
首先打開OpenCV的下載頁面:
如果下載或打開頁面速度慢的話,可以使用我分享的百度網盤文件鏈接:
提取碼:hqup
![](https://img-blog.csdnimg.cn/14792d782d004740abd84820b68efbea.png)
點擊Sources下載文件壓縮包,打開壓縮包後找到
" opencv-4.6.0\data\haarcascades\haarcascade_frontalface_default.xml "
![](https://img-blog.csdnimg.cn/07986dc376f94845a4d273990a5e8197.png)
4.下載python支持的v2模塊
在3.5版本後,輸入以下命令下載模塊:
pip install opencv-python
![](https://img-blog.csdnimg.cn/ecef156b4034466899d722b56a1805d0.png)
5.圖片素材
https://pan.baidu.com/s/1C0aD_iN4KCgV3AO3gtNeO
提取碼:p7at
提取碼:p7at
6.代碼
import cv2
import random
# OpenCV 人臉檢測
pathf = r'C:\haarcascade_frontalface_default.xml'
face_patterns = cv2.CascadeClassifier(pathf) #opencv的人臉檢測庫haarcascade_frontalface_default.xml文件路徑
sample_image = cv2.imread('C:/python/shengdan/11.jpg') #你要加帽子的頭像圖像
faces = face_patterns.detectMultiScale(sample_image,scaleFactor=1.1,minNeighbors=8, minSize=(50, 50)) #這三行人臉大小參數可調,以識別出人臉。
# 聖誕帽
hats = []
for i in range(1,8): #備選4頂帽子可換
hats.append(cv2.imread('C:\聖誕帽.png' %i ,-1))
print(hats)
for face in faces: #不同的臉不同的帽子
# 隨機一頂帽子
hat = random.choice(hats)
print (hat)
# 調整帽子尺寸
#print (face[3]) #w值 即框出的人臉的寬.
scale = float(face[3]) / hat.shape[0] * 1.5
# print (scale)
hat = cv2.resize(hat, (0, 0), fx=scale, fy=scale)
# 根據人臉坐標調整帽子位置
x_offset = int(face[0] + face[2] / 2 - hat.shape[1] / 2)+50 #可跳整帽子的位置
y_offset = int(face[1] - hat.shape[0] / 2) #可跳整帽子的位置
# 計算貼圖位置,註意防止超出邊界的情況
x1, x2 = max(x_offset, 0), min(x_offset + hat.shape[1], sample_image.shape[1])
y1, y2 = max(y_offset, 0), min(y_offset + hat.shape[0], sample_image.shape[0])
hat_x1 = max(0, -x_offset)
hat_x2 = hat_x1 + x2 - x1
hat_y1 = max(0, -y_offset)
hat_y2 = hat_y1 + y2 - y1
# 透明部分的處理
alpha_h = hat[hat_y1:hat_y2, hat_x1:hat_x2, 3] / 255
alpha = 1 - alpha_h
# 按3個通道合併圖片
for c in range(0, 3):
sample_image[y1:y2, x1:x2, c] = (alpha_h * hat[hat_y1:hat_y2, hat_x1:hat_x2, c] + alpha * sample_image[y1:y2, x1:x2, c])
# 保存最終結果
cv2.imwrite('faces_detect10.png', sample_image)
感謝您的閱讀,如覺得有用請您點贊,您的鼓勵是對我的最大動力!
END
2022/12/24
本文作者:彭_Yu
轉載請註明原文鏈接:https://www.cnblogs.com/pyublog/p/17003381.html