opencv图像融合(给人脸添加一个眼镜)(代码片段)

小白羀号 小白羀号     2022-11-28     299

关键词:

基于dlib68点人脸检测的小功能实现

图像旋转找的现成的方法,稍稍麻烦点的地方就是mask处理,虽然目的达到了,但是效果一般

 1 import numpy as np
 2 import cv2 as cv
 3 import dlib
 4 import math
 5 
 6 # 做一个戴眼镜的滤镜效果
 7 
 8 detector = dlib.get_frontal_face_detector()
 9 predictor = dlib.shape_predictor(\'dlib/shape_predictor_68_face_landmarks.dat\')
10 
11 
12 # 图像旋转,保持原来大小
13 def rotate_bound(image, angle):
14     # grab the dimensions of the image and then determine the
15     # center
16     (h, w) = image.shape[:2]
17     (cX, cY) = (w // 2, h // 2)
18 
19     # grab the rotation matrix (applying the negative of the
20     # angle to rotate clockwise), then grab the sine and cosine
21     # (i.e., the rotation components of the matrix)
22     M = cv.getRotationMatrix2D((cX, cY), -angle, 1.0)
23     cos = np.abs(M[0, 0])
24     sin = np.abs(M[0, 1])
25 
26     # compute the new bounding dimensions of the image
27     nW = int((h * sin) + (w * cos))
28     nH = int((h * cos) + (w * sin))
29 
30     # adjust the rotation matrix to take into account translation
31     M[0, 2] += (nW / 2) - cX
32     M[1, 2] += (nH / 2) - cY
33 
34     # perform the actual rotation and return the image
35     return cv.warpAffine(image, M, (nW, nH))
36 
37 
38 def detect_face(camera_idx):
39     # camera_idx: 电脑自带摄像头或者usb摄像头
40     cv.namedWindow(\'detect\')
41     cap = cv.VideoCapture(camera_idx)
42 
43     while cap.isOpened():
44         cv.namedWindow(\'detect\', cv.WINDOW_AUTOSIZE)
45         ok, frame = cap.read()
46         # 为摄像头的时候,翻转画面
47         if camera_idx == 0 or camera_idx == 1:
48             frame = cv.flip(frame, 1, dst=None)
49         if not ok:
50             break
51         gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
52         rects = detector(gray, 0)
53         for i in range(len(rects)):
54             landmarks = np.matrix([[p.x, p.y] for p in predictor(frame, rects[i]).parts()])
55             # 脸轮廓:1~17
56             # 眉毛:18~22, 23~27
57             # 鼻梁:28~31
58             # 鼻子:31~36
59             # 眼睛:37~42, 43~48
60             # 嘴唇:49~68
61             # 左眼角和右眼角的位置
62             pos_left = (landmarks[0][0, 0], landmarks[36][0, 1])
63             pos_right = (landmarks[16][0, 0], landmarks[45][0, 1])
64             face_center = (landmarks[27][0, 0], landmarks[27][0, 1])
65             src = cv.imread(\'images/glasses.jpg\')
66             # 433x187眼镜图片原始大小,按人脸比例缩放一下
67             length = pos_right[0] - pos_left[0]
68             width = int(187/(433/length))
69             src = cv.resize(src, (length, width), interpolation=cv.INTER_CUBIC)
70 
71             # 角度旋转,通过计算两个眼角和水平方向的夹角来旋转眼镜
72             sx = landmarks[36][0, 0] - landmarks[45][0, 0]
73             sy = landmarks[36][0, 1] - landmarks[45][0, 1]
74             # 夹角正切值
75             r = sy/sx
76             # 求正切角,弧度转为度
77             degree = math.degrees(math.atan(r))
78             # 调用旋转方法
79             src = rotate_bound(src, degree)
80 
81             # mask处理,去掉旋转后的无关区域,初始化一个全0mask,用或运算处理mask
82             src_mask = np.zeros(src.shape, src.dtype)
83             src_mask = cv.bitwise_or(src, src_mask)
84             # 泊松融合
85             output = cv.seamlessClone(src, frame, src_mask, face_center, cv.MIXED_CLONE)
86         cv.imshow(\'detect\', output)
87         c = cv.waitKey(10)
88         if c & 0xFF == ord(\'q\'):
89             break
90     cap.release()
91     cv.destroyAllWindows()
92 
93 
94 if __name__ == \'__main__\':
95     video = \'video/face.mp4\'
96     detect_face(video)

眼镜图片

 

效果

泊松融合三种参数效果在这里一样

除了眼镜图片较浅其他的还算可以吧

还可以扩展面部其他装饰

 

参考:

泊松融合:https://www.smwenku.com/a/5b7aec012b7177392c97200d

图像旋转:https://blog.csdn.net/hui3909/article/details/78854387

 

用opencv做的静态图片人脸识别

...最相似的图片,也就是辨别不同的人。  环境:VS2013+opencv2.4.13  主要是算法:opencv中人脸识别算法(截取人脸)+哈希算法(辨别人脸)  opencv中人脸识别算法:这个很常用,就是普通的人脸识别算法,直接上代码: &... 查看详情

opencv图像无缝融合-seamlessclone介绍与使用(附python/c++源码)(代码片段)

导读本期将介绍并演示OpenCV使用seamlessClone实现图像无缝融合效果。介绍seamlessClone是OpenCV3后添加的函数,使用此函数可以轻松将一幅图像中的指定目标复制后粘贴到另一幅图像中,并自然的融合。函数说明:参数:src... 查看详情

opencv中把一个图片融合到另一个图像中为啥程序正确不显示图片

...吧!书上的代码是有一定的环境的,譬如说我的是VS2010+OpenCV2.1,你的所使用的版本和书上的版本号不同,当然是有一定的差别的,还有就是在视频处理,摄像头调用,这个是电脑自身的驱动,编解码器问题,这就导致了为什么... 查看详情

opencv高手勿入!半小时学会基本操作图像裁剪融合(代码片段)

【OpenCV】高手勿入!半小时学会基本操作4概述图像裁剪数值计算图像融合概述OpenCV是一个跨平台的计算机视觉库,支持多语言,功能强大.今天小白就带大家一起携手走进OpenCV的世界.(第4篇)图像裁剪cv2.resize能帮助我们读图像进... 查看详情

opencv4.5.4dnn人脸识别模块使用介绍--如何快速搭建一个人脸识别系统(代码片段)

点击下方卡片,关注“OpenCV与AI深度学习”视觉/图像重磅干货,第一时间送达导读本文主要介绍OpenCV4.5.4中人脸识别模块的使用和简易人脸识别系统的搭建,供大家参考。背景介绍前几天刚刚更新的OpenCV4.5.4版本将基... 查看详情

基于opencv的图像融合(代码片段)

 版本由于每个版本的代码偏差都比较大,这里是基于opencv3.4.5版本的开发https://github.com/opencv/opencv/releases/tag/3.4.5https://github.com/opencv/opencv_contrib/releases/tag/3.4.5编译命令:cmake-DOPENCV_ENABLE_NONFREE=ON-DBUILD_E 查看详情

基于opencv实现人脸识别案例(代码片段)

一、基础我们使用机器学习的方法完成人脸检测,首先需要大量的正样本图像(面部图像)和负样本图像(不含面部的图像)来训练分类器。我们需要从其中提取特征。下图中的Haar特征会被使用,就像我... 查看详情

opencv中把一个图片融合到另一个图像中为啥程序正确不显示图片

...vShowImage()之后添加cvWaitKey(0) 参考技术B你的程序是安装opencv中文网站的示例写的,程序没有问题,应该是你在输入图像名称时出错了,或者是你待读取的图像不是彩色的。另外关于main函数的两个参数含义,建议你看一下opencv... 查看详情

(附代码)树莓派利用opencv的图像跟踪人脸识别等

编者荐语 树莓派(RaspberryPi)是各种派中最早开始流行起来的一个嵌入式Linux板卡,其本质是尺寸仅有信用卡大小的一个小型电脑。你可以将树莓派连接电视、显示器、键盘鼠标等设备当一台正常Linux电脑使用,当然,现在也... 查看详情

人脸检测实战终极:使用opencv和python进行人脸对齐(代码片段)

使用OpenCV和Python进行人脸对齐这篇博文的目的是演示如何使用OpenCV、Python和面部标志对齐人脸。给定一组面部标志(输入坐标),我们的目标是将图像扭曲并转换为输出坐标空间。在这个输出坐标空间中,整个数... 查看详情

opencv小项目:图像融合(泊松融合—possionblending)(代码片段)

原理太多了,看这些博客吧主要参考博客1:http://blog.csdn.net/hjimce/article/details/45716603主要参考博客2:http://blog.csdn.net/wd1603926823/article/details/49867069主要参考博客3:http://blog.csdn.net/baimafujinji/article/detai 查看详情

python笔记-opencv图像处理和人脸识别(代码片段)

一.简介1.OpenCV:OpenCV的全称是OpenSourceComputerVisionLibrary,是一个开源的跨平台的计算机视觉库。可以运行在Linux、Windows、Android和macOS操作系统上,帮助人们快速构建复杂的视觉应用程序。2.计算机视觉:计算机视觉&... 查看详情

opencv图像基本操作——读取显示截取图像属性颜色通道边界填充图像融合(代码片段)

引言我们都会有一个疑惑:计算机眼中的图像长什么样子呢?首先拿来一张图片分割成无数个小格,每一个小格叫做像素点,计算机中的图像是由像素点构成的像素矩阵,像素点构成它的每一个值都是在0-255之... 查看详情

“opencv”是啥?

参考技术AOpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库.无论你是做科学研究,还是商业应用,opencv都可以作为你理想的工具库,因为,对于这两者,它完全是免费的。该库采用C及C++语言编写,可以在windows,linux,m... 查看详情

opencv-活体检测

...现“识真”而不止“识脸”。▲使用工具:opencv,python,matlab首先1.构建图像数据集2.实现一个能够进行活体检测的卷积神经网络(我们称之为「LivenessNet」)3.训练活体检测网络4.创建一个能够使用我们训练好的活体... 查看详情

使用java和opencv进行灰度图像的图像融合给出了奇怪的结果

我目前正在尝试使用java和OpenCV包装器融合放射灰度图像。我写了一些代码来在数据库中找到相似的图像并融合它们。融合部分是我在努力的地方。这是我正在努力的方法:publicBufferedImageregisterImages(BufferedImagesource,BufferedImagetarget)... 查看详情

OpenCV 从图像中获取人脸并使用模型进行预测

】OpenCV从图像中获取人脸并使用模型进行预测【英文标题】:OpenCVgetfacesfromimageandpredictwithmodel【发布时间】:2020-08-1723:04:00【问题描述】:从灰度图像中检索人脸的代码(已经转换为cv::Mat)工作起来很奇怪,我做错了什么?//ini... 查看详情

opencv添加中文——(代码片段)

OpenCV添加文字的方法putText(...),添加英文是没有问题的,但如果你要添加中文就会出现“???”的乱码,需要特殊处理一下。下文提供封装好的(代码)方法,供OpenCV添加中文使用。往期目录《OpenCV环境搭建(一)》《图片人... 查看详情