当前位置:
首页 > temp > python入门教程 >
-
#Python #OpenCV 使用Python为你的圣诞节增添更多乐趣
1.前言
编辑Merry Christmas!今天是2022年12月24日,今晚是平安夜在这里提前祝大家圣诞节快乐!
大家可能对@官方微信给自己的头像加上一顶圣诞帽的事情记忆尤新,又是一年圣诞节,让我们用Python制作圣诞帽,给自己的头像(当然也可以是照片)加个圣诞帽吧 !
这个项目并不是很难,这次主要用到了OpenCV图形识别库,那么话不多说,让我们开始吧!
2.目标与效果展示
本次项目主要实现将圣诞帽自动加到人脸上的功能。
3.下载OpenCV图形识别库
首先打开OpenCV的下载页面:
下载OpenCVhttps://opencv.org/releases/
如果下载或打开页面速度慢的话,可以使用我分享的百度网盘文件链接:
提取码:hqup
直接下载haarcascade_frontalface_default.xm
编辑
点击Sources下载文件压缩包,打开压缩包后找到
" opencv-4.6.0datahaarcascadeshaarcascade_frontalface_default.xml "
编辑
4.下载python支持的v2模块
在3.5版本后,输入以下命令下载模块:
|
pip install opencv-python |
编辑
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) |
本文作者:彭_Yu 转载请注明原文链接:https://www.cnblogs.com/pyublog/p/17003381.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数