#Python #OpenCV 使用Python为你的圣诞节增添更多乐趣
目录
1.前言
编辑
Merry Christmas!今天是2022年12月24日,今晚是平安夜在这里提前祝大家圣诞节快乐!
大家可能对@官方微信给自己的头像加上一顶圣诞帽的事情记忆尤新,又是一年圣诞节,让我们用Python制作圣诞帽,给自己的头像(当然也可以是照片)加个圣诞帽吧 !
这个项目并不是很难,这次主要用到了OpenCV图形识别库,那么话不多说,让我们开始吧!
2.目标与效果展示
本次项目主要实现将圣诞帽自动加到人脸上的功能。

3.下载OpenCV图形识别库
首先打开OpenCV的下载页面:
下载OpenCVhttps://opencv.org/releases/
如果下载或打开页面速度慢的话,可以使用我分享的百度网盘文件链接:
提取码:hqup
编辑
点击Sources下载文件压缩包,打开压缩包后找到
" opencv-4.6.0\data\haarcascades\haarcascade_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)

感谢您的阅读,如觉得有用请您点赞,您的鼓励是对我的最大动力!
END
2022/12/24
联系我:pengyu717@yeah.net
#Python #OpenCV 使用Python为你的圣诞节增添更多乐趣的更多相关文章
- 搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台
搭建基于python +opencv+Beautifulsoup+Neurolab机器学习平台 By 子敬叔叔 最近在学习麦好的<机器学习实践指南案例应用解析第二版>,在安装学习环境的时候 ...
- .NET + OpenCV & Python + OpenCV 配置
最近需要做一个图像识别的GUI应用,权衡了Opencv+ 1)QT,2)Python GUI,3).NET后选择了.NET... 本文给出C#+Opencv和Python+Opencv的相应参考,节省 ...
- RPi 2B python opencv camera demo example
/************************************************************************************** * RPi 2B pyt ...
- (原)windows8.1上使用opencv for python
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6204100.html 参考网址: http://www.docs.opencv.org/master/ ...
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- Ubuntu16.04安装opencv for python/c++
Ubuntu16.04安装opencv for python/c++ 网上关于opencv的安装已经有了不少资料,但是没有一篇资料能让我一次性安装成功,因此花费了大量时间去解决各种意外,希望这篇能给一 ...
- Python+OpenCV图像处理(一)
Python+OpenCV图像处理(一): 读取,写入和展示图片 调用摄像头拍照 调用摄像头录制视频 1. 读取.写入和展示图片 图像读入:cv2.imread() 使用函数cv2.imread() ...
- python opencv show图片,debug技巧
debug的时候可以直接把图片画出来debug. imshow函数就是python opencv的展示图片的函数,第一个是你要起的图片名,第二个是图片本身.waitKey函数是用来展示图片多久的,默认 ...
- Python+OpenCV图像处理(一)——读取显示一张图片
先在此处先声明,后面学习python+opencv图像处理时均参考这位博主的博文https://blog.csdn.net/u011321546/article/category/7495016/2? ...
- [PyImageSearch] Ubuntu16.04 使用OpenCV和python识别信用卡 OCR
在今天的博文中,我将演示如何使用模板匹配作为OCR的一种形式来帮助我们创建一个自动识别信用卡并从图像中提取相关信用卡数位的解决方案. 今天的博文分为三部分. 在第一部分中,我们将讨论OCR-A字体,这 ...
随机推荐
- vscode 中前端代码不能通过ctrl+鼠标左键点击跳转(亲测可行)
1.ctrl+p 查找 jsconfig.json文件.如果没有,就在根目录下新建jsconfig.json 2.若已经有文件,如下图新增paths 若没有,复制下面内容到jsconfig.json ...
- 《Kubernetes零基础快速入门》PDF电子书赠阅
<Python 3.8从入门到精通(视频教学版)> <Kubernetes零基础快速入门> PDF电子书赠阅,个人学习使用,禁止任何形式的商用. https://pan.bai ...
- Markdown中如何让# * >等符号原样显示,不转义解析成对应Markdown语法
加\转义: * markdown 中如果遇到有字符与原有语法冲突, 可以使用反引号"`"包裹需要转移的内容. * 反引号位于键盘左上角Esc下面的位置 示例: # * > 原 ...
- vue项目,npm run dev的时候出现:Error: error:0308010C:digital envelope routines::unsupported
vue项目,npm run dev的时候出现:Error: error:0308010C:digital envelope routines::unsupported 这个是node的版本问题.我的n ...
- unity整理
1. hashmap实现原理 Dictionary hashtable https://www.cnblogs.com/InCerry/p/10325290.html2. malloc与new3. 循 ...
- 【PyCharm】PyCharm设置深色背景
操作步骤 1.依次点击File->Settings->Appearance&Behavior->Appearance 2.选择Theme为Darcula
- OPENCV3 API
图像翻转 void flip(InputArray src, OutputArray dst, int flipCode); flipCode: 0: x 轴翻转 1: y 轴翻转 <0: x, ...
- CICD中一个巨头--jenkins
持续化集成,发布离不开CICD,CICD中有最重要的一个程序就是jenkins,本章主要讲jenkins部署和建立项目任务 jenkins的出现,大大的提高了代码上线问题,通过图中可以看出,开发人员通 ...
- winform 登录后跳转百度地图报错 使用委托解决
最近用winform做一个登录后跳转到百度地图的小程序,使用了线程,winform的UI是单线程操作的,由于百度地图写在另外一个窗体,导致报错.后来使用了委托解决了这个小问题. delegate vo ...
- c# 如何实现图片压缩
一般在web应用中,对客户端提交上来的图片肯定需要进行压缩的.尤其是比较大的图片,如果不经过压缩会导致页面变的很大,打开速度比较慢,当然了如果是需要高质量的图片也得需要生产缩略图. 下面贴出我自己琢磨 ...