opencv图像融合(大头)
单纯的变大再覆盖上去,头部检测信息不够全,效果实在是太差,就不多说了,只是按照自己的思路玩一玩,没有达到抖音上那么好的效果
import cv2 as cv
import numpy as np
import dlib detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('../dlib/shape_predictor_68_face_landmarks.dat') def big_head(camera_idx):
cap = cv.VideoCapture(camera_idx)
while cap.isOpened():
cv.namedWindow('big_head', cv.WINDOW_AUTOSIZE)
ok, frame = cap.read()
# 镜像反转
if camera_idx == 0 or camera_idx == 1:
frame = cv.flip(frame, 1, dst=None)
if not ok:
break
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
rects = detector(gray, 0)
for i in range(len(rects)):
landmarks = np.matrix([[p.x, p.y] for p in predictor(frame, rects[i]).parts()])
# 脸部中心点face_center,下巴down
face_center = (landmarks[29][0, 0], landmarks[29][0, 1])
down = (landmarks[8][0, 0], landmarks[8][0, 1])
left = (landmarks[0][0, 0], landmarks[0][0, 1])
right = (landmarks[16][0, 0], landmarks[0][0, 1])
# 上下偏移量y_offset,为了框出尽可能全的头部信息,边框扩大
y_offset = int(1.2*abs(face_center[1]-down[1]))
rect_start = (int(0.8*left[0]), face_center[1]-y_offset)
rect_end = (int(1.2*right[0]), face_center[1]+y_offset)
print(rect_start, rect_end)
face = frame[rect_start[1]: rect_end[1], rect_start[0]: rect_end[0]]
# 放大比例k_size
k_size = 1.1
size = (int(k_size*(rect_end[0]-rect_start[0])), int(k_size*(rect_end[1]-rect_start[1])))
face = cv.resize(face, size, interpolation=cv.INTER_CUBIC)
face_mask = 255 * np.ones(face.shape, face.dtype)
output = cv.seamlessClone(face, frame, face_mask, face_center, cv.NORMAL_CLONE)
cv.imshow('face', face) cv.rectangle(frame, rect_start, rect_end, (0, 0, 255), -1)
# cv.circle(frame, face_center, 1, (0, 0, 255), -1) cv.imshow('big_head', output)
c = cv.waitKey(10)
if c & 0xFF == ord('q'):
break
cap.release()
cv.destroyAllWindows() if __name__ == '__main__':
video = '../video/face.mp4'
big_head(video)
# test()
效果

opencv图像融合(大头)的更多相关文章
- opencv图像融合(给人脸添加一个眼镜)
基于dlib68点人脸检测的小功能实现 图像旋转找的现成的方法,稍稍麻烦点的地方就是mask处理,虽然目的达到了,但是效果一般 import numpy as np import cv2 as cv ...
- OpenCV探索之路(二十四)图像拼接和图像融合技术
图像拼接在实际的应用场景很广,比如无人机航拍,遥感图像等等,图像拼接是进一步做图像理解基础步骤,拼接效果的好坏直接影响接下来的工作,所以一个好的图像拼接算法非常重要. 再举一个身边的例子吧,你用你的手 ...
- OpenCV计算机视觉学习(2)——图像算术运算 & 掩膜mask操作(数值计算,图像融合,边界填充)
在OpenCV中我们经常会遇到一个名字:Mask(掩膜).很多函数都使用到它,那么这个Mask到底是什么呢,下面我们从图像基本运算开始,一步一步学习掩膜. 1,图像算术运算 图像的算术运算有很多种,比 ...
- OpenCV中图像融合
准备2副背景图像,注意图像黑色的部分,是作为mask用的,我们会用灰度图的方式打开它们,这时黑色的部分值为0,则图像融合时候,可以把第二幅图像在黑色的部分显示出来. 代码非常简单,注意就是图 ...
- paper 101:图像融合算法及视觉艺术应用
1:基于泊松方程的图像融合方法,利用偏微分方程实现了不同图像上区域的无缝融合.比较经典的文章: P. Pérez, M. Gangnet, A. Blake. Poisson image editin ...
- 图像融合之泊松融合(Possion Matting)
前面有介绍拉普拉斯融合,今天说下OpenCV泊松融合使用.顺便提一下,泊松是拉普拉斯的学生. 泊松融合的原理请参考这篇博文https://blog.csdn.net/u011534057/articl ...
- 基于均值坐标(Mean-Value Coordinates)的图像融合算法的具体实现
目录 1. 概述 2. 实现 2.1. 准备 2.2. 核心 2.2.1. 均值坐标(Mean-Value Coordinates) 2.2.2. ROI边界栅格化 2.2.3. 核心实现 2.2.4 ...
- 如何使用Python实现图像融合及加法运算?
摘要:本篇文章主要讲解Python调用OpenCV实现图像融合及加法运算,包括三部分知识:图像融合.图像加法运算.图像类型转换. 本文分享自华为云社区<[Python图像处理] 五.图像融合.加 ...
- OpenCV图像金字塔:高斯金字塔、拉普拉斯金字塔与图片尺寸缩放
这篇已经写得很好,真心给作者点个赞.题目都是直接转过来的,直接去看吧. Reference Link : http://blog.csdn.net/poem_qianmo/article/detail ...
随机推荐
- HDU - 1754 线段树-单点修改+询问区间最大值
这个也是线段树的经验问题,待修改的,动态询问区间的最大值,只需要每次更新的时候,去把利用子节点的信息进行修改即可以. 注意更新的时候区间的选择,需要对区间进行二分. #include<iostr ...
- Latex(数学)
目录 字体 罗马字体 \mathrm{} 斜体 \mathit{} 粗体 \mathbf{} 无衬线-f \mathsf{} 打字机字体 \mathtt{} 书法字体 \mathcal{} 黑板粗体 ...
- 利用lnmp一键安装的php环境忘记mysql,root用户密码解决方法
1.cd /lnmp1.5/tools/ 2.sh reset_mysql_root_password.sh 这样,即可完成修改!
- ssm知识点总结
项目名称:教育网—在线调查系统 项目总体流程图: 设计调查:调查-->包裹--->问题(增删改查) 1.调整包裹顺序 2.移动复制包裹 3.深度删除 创建调查流程分析: 主要生成surve ...
- p68理想的性质
1.如何由2.2.4推出后面的结论? 2.为什么A可以等于R? 3.如何证明3? π:R->R/M套用定理2.2.4(2)和(1) R2是R/M,I是R/M的理想也就是R2的理想,所以f^(-1 ...
- bootstrap 弹窗或者提示框插件 bootstrap-growl 和bootstrap-notify
Bootstrap简单好用的页面右上角咆哮提示框 - daidaineteasy的专栏 - CSDN博客https://blog.csdn.net/daidaineteasy/article/deta ...
- VMware虚拟机与Windows文件共享
开发中,我们经常的需求是这样的:我想再Windows中进行快捷开发,但是想在linux中运行,那么需要将文件方便在linux中管理,基本可以分成两种方式: 1. 使用网络工具:vmware_tool工 ...
- Windows和Linux的Jmeter分布式集群压力测试
Windows的Jmeter分布式集群压力测试 原文:https://blog.csdn.net/cyjs1988/article/details/80267475 在使用Jmeter进行性能测试时, ...
- phantomjs 了解
转自:http://www.cnblogs.com/lei0213/ PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎.它原生支持多种web 标准:DOM 操作,CSS选择器,JS ...
- [转帖]50个必知的Linux命令技巧,你都掌握了吗?
50个必知的Linux命令技巧,你都掌握了吗? https://blog.51cto.com/lizhenliang/2131141 https://blog.51cto.com/lizhenlian ...