将摄像头的读入的人像放入背景视频中_with_OpenCV_in_Python
import cv2
import numpy as np
import time
cap = cv2.VideoCapture(0)
background_capture = cv2.VideoCapture(r'./a.avi')
counter = -1
while cap.isOpened():
counter += 1
start_time_extract_figure = time.time()
# your code
# extract your figure
_, frame = cap.read()
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
mask = np.zeros(frame.shape[:2], np.uint8)
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
rect = (50, 50, 450, 490)
start_time_t = time.time()
cv2.grabCut(frame, mask, rect, bgdModel, fgdModel, 1, cv2.GC_INIT_WITH_RECT)
during_time = time.time() - start_time_t
print('{}-th t_time: {}'.format(counter, during_time))
mask2 = np.where((mask == 2) | (mask == 0), (0,), (1,)).astype('uint8')
frame = frame * mask2[:, :, np.newaxis]
elapsed_time_extract_figure = time.time() - start_time_extract_figure
print('{}-th extract_figure_time: {}'.format(counter, elapsed_time_extract_figure))
# extract the background
start_time_combination = time.time()
# your code
ret, background = background_capture.read()
background = cv2.resize(background, (640, 480), interpolation=cv2.INTER_AREA)
# maybe the default size of embedded camera is 640x480
# combine the figure and background using mask instead of iteration
mask_1 = frame > 0
mask_2 = frame <= 0
combination = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) * mask_1 + background * mask_2
elapsed_time_combination = time.time() - start_time_combination
print('{}-th combination_time: {}'.format(counter, elapsed_time_combination))
cv2.imshow('combination', combination)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
发现影响速度的最主要因素是grabCut函数, 因此附官网grabCut详细说明https://docs.opencv.org/trunk/d8/d83/tutorial_py_grabcut.html供以参考.
- img - Input image
- mask - It is a mask image where we specify which areas are background, foreground or probable background/foreground etc. It is done by the following flags, cv2.GC_BGD, cv2.GC_FGD, cv2.GC_PR_BGD, cv2.GC_PR_FGD, or simply pass 0,1,2,3 to image.
- rect - It is the coordinates of a rectangle which includes the foreground object in the format (x,y,w,h)
- bdgModel, fgdModel - These are arrays used by the algorithm internally. You just create two np.float64 type zero arrays of size (1,65).
- iterCount - Number of iterations the algorithm should run.
- mode - It should be cv2.GC_INIT_WITH_RECT or cv2.GC_INIT_WITH_MASK or combined which decides whether we are drawing rectangle or final touchup strokes.
将摄像头的读入的人像放入背景视频中_with_OpenCV_in_Python的更多相关文章
- 将从摄像头即时读入的人像放入背景视频中_with_OpenCV_in_Python
import cv2 import numpy as np import time cap = cv2.VideoCapture(0) background_capture = cv2.VideoCa ...
- NX二次开发-UFUN将实体放入STL文件中函数UF_STD_put_solid_in_stl_file
NX9+VS2012 #include <uf.h> #include <uf_obj.h> #include <uf_modl.h> #include <u ...
- C语言:将3*4矩阵中找出行最大,列最小的那个元素。-将低于平均值的人数作为函数返回值,将低于平均分的分数放入below数组中。
//将3*4矩阵中找出行最大,列最小的那个元素. #include <stdio.h> #define M 3 #define N 4 void fun(int (*a)[N]) { ,j ...
- 将DLL放入到资源中,运行时自动加载
今天在看到 一个小软件,考勤用的 AttendanceSheet_V_1_2,只有一个EXE文件,绿色的随便考到哪里都可以运行. 顺手反编译后发现,他将需要的DLL也放入到资源文件了,在启动的时候自动 ...
- 【转】【Android测试技巧】01. root后adb shell默认不是root用户时,如何将文件放入手机系统中
http://blog.csdn.net/wirelessqa/article/details/8624208 有些机器root后通过adb shell 后,默认不是root用户,需要输入 su才能切 ...
- JAVA ArrayList实现随机生成数字,并把偶数放入一个列表中
package Code429; import java.util.ArrayList;import java.util.Random; public class CodeArrayListPrint ...
- 两个list<Map<String,String>>放入一个list中
// public static void main(String[] args) {// List<Map<String, String>> list2 = new Arra ...
- 字体文件放入CDN服务器中,跨域问题(IIS版)
Font from origin 'http:/XXXX' has been blocked from loading by Cross-Origin Resource Sharing policy: ...
- php文件以二进制形式上传并放入到数据库中
conn.php: <?php $id=mysql_connect('localhost','root','root'); mysql_select_db("db_database12 ...
随机推荐
- 201521123102 《Java程序设计》第4周学习总结
1. 本周学习总结 2. 书面作业 Q1.注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 类的注释: 方法的注释: Q2.面向对象设计(大作业1- ...
- 201521123023《java程序设计》第三周学习总结
1. 本周学习总结 2. 书面作业 1.代码阅读 public class Test1 { private int i = 1;//这行不能修改 private static int j = 2; p ...
- 201521123030《Java程序设计》 第2周学习总结
本周学习总结 String常量,创建之后不能再进行修改 使用+连接字符串会产生新字符串,要大量使用重复性连接应用StringBuilder,检测字符串相等应用equal方法. 枚举类型变量的取值在一个 ...
- [转载]请教各位高手光盘版或者U盘版的BT保存配置的问题
这样安装的bt4默认是不能保存配置的,每次你更改了设置,下次重启又没有了.在网上下载一个叫做"saveFile.rar"的压缩包,大小40K左右,这个是bt4能够保存配置关键,当然 ...
- 201521123037 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 201521123018 《Java程序设计》第11周学习总结
1. 本章学习总结 你对于本章知识的学习总结 2. 书面作业 一.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问, ...
- JS中有关分支结构、循环结构以及函数应用的一些简单练习
案例一:搬桌子 年龄大于七岁男女都可以搬桌子,年龄小于七岁大于五岁的男生可以搬桌子: var num =parseInt(prompt("请输入你的年龄")) var sex ...
- Eclipse rap 富客户端开发总结(9) : rap上传与下载
一 上传 上传即将文件上传到服务器上,在客户端需要写相应的脚本,服务器端需要注册相应的 handle 接受客户端的请求. 原理: Rap 的上传和下载是通过普通的 web 的方式进行上传和下载的 , ...
- 【java】聊聊java里的接口
接口的概念 java中的接口用于描述类应该具备什么样的功能,而不给出具体的实现,一个类可以“实现”多个接口 [注意]接口不是类,而是对类的一组描述 还是让我们通过一个例子来看看接口如何运作吧! ...
- 在windows下安装flex和bison
学习Stellar-core 需要依赖项flex .bison .gcc三个依赖项 下载得网址:链接: https://pan.baidu.com/s/1mitCLcs 密码: 3jaj 通过 w ...