1, 打开相机,通过背景不变差分法,框出物体的范围并求得其坐标

2,将其范围映射到一张图片上

3,在同一张图片上加mask,将框出的范围映射到mask上,并将其透明显示。


#include<iostream>
#include <math.h>
#include <opencv.hpp>using namespace std;
using namespace cv;Mat temp, frame;Mat MoveDetect(Mat background, Mat img)
{//将background和img转为灰度图Mat result = img.clone();Mat gray1, gray2;cvtColor(background, gray1, CV_BGR2GRAY);cvtColor(img, gray2, CV_BGR2GRAY);//进行canny边缘检测 //Canny(background, background, 0, 30, 3);//将background和img做差;对差值图diff进行阈值化处理Mat diff;absdiff(gray1, gray2, diff);threshold(diff, diff, 50, 255, CV_THRESH_BINARY);//腐蚀膨胀消除噪音Mat element = getStructuringElement(MORPH_RECT, Size(3, 3));Mat element2 = getStructuringElement(MORPH_RECT, Size(11, 11));erode(diff, diff, element);dilate(diff, diff, element2);//查找并绘制轮廓vector<vector<Point>> contours;vector<Vec4i> hierarcy;findContours(diff, contours, hierarcy, CV_RETR_EXTERNAL, CHAIN_APPROX_NONE); //查找轮廓vector<Rect> boundRect(contours.size());                                     //定义外接矩形集合//查找正外接矩形int x0 = 0, y0 = 0, w0 = 0, h0 = 0;int x1 = 0, y1 = 0;double Area = 0, MaxArea = 0;for (int i = 0; i<contours.size(); i++){boundRect[i] = boundingRect((Mat)contours[i]);                           //查找每个轮廓的外接矩形x0 = boundRect[i].x;y0 = boundRect[i].y;w0 = boundRect[i].width;h0 = boundRect[i].height;//计算面积Area = contourArea(contours[i]);if (w0 > 50 && h0 > 50){for (int j = 0; j<20; j++){MaxArea = contourArea(contours[0]);if (Area > MaxArea){MaxArea = Area;}printf("MaxArea = %f\n", MaxArea);}printf("x0 = %d y0 = %d    ", x0, y0);printf("w0 = %d h0 = %d    ", w0, h0);printf("i = %d\n", i);printf("Area = %f\n", Area);}if (w0 > 50 && h0 > 50){Mat CameraPicMask, CameraImg, ProjectorPicMask, ProjectorImg;Mat ProjectorPic, ProjectorPicClone;ProjectorPic = imread("0002.jpg");                  //0002.jpgProjectorPic.copyTo(ProjectorPicClone);rectangle(result, Point(x0, y0), Point(x0 + w0, y0 + h0), Scalar(255, 255, 255), 0.1, 8);         //绘制第i个外接矩形rectangle(ProjectorPic, Point(x0, y0), Point(x0 + w0, y0 + h0), Scalar(255, 255, 255), 0.1, 8);ProjectorPic(Rect(Point(x0, y0), Point(x0 + w0, y0 + h0))).setTo(0);imshow("ProjectorImgB", ProjectorPic);ProjectorPicMask = Mat::zeros(ProjectorPic.size(), CV_8UC3);ProjectorPicMask(Rect(Point(x0, y0), Point(x0 + w0, y0 + h0))).setTo(255);ProjectorPicClone.copyTo(ProjectorImg, ProjectorPicMask);imshow("ProjectorImgA", ProjectorImg);}}return result;
}void main()
{VideoCapture cap(0);if (!cap.isOpened()) //检查打开是否成功return;Mat result, background;int count = 0;while (1){cap >> frame;if (!frame.empty()){count++;if (count == 1)//背景差result = MoveDetect(frame, frame);                        //帧差elseresult = MoveDetect(temp, frame);imshow("CameraImgA", result);temp = frame.clone();if (waitKey(50) == 27)break;}elsecontinue;}cap.release();
}

运行结果

检测相机视野中的物体运动并用Mask显示相关推荐

  1. Cardboard虚拟现实开发技巧(一)之放置一个固定在视野中的物体

    Google Cardboard 虚拟现实眼镜开发技巧(一)之放置一个固定在视野中的物体 利用CardboardMain下的Head轻松放置一个固定在视野中的物体 大家知道在游戏开发中,我们经常会需要 ...

  2. 线扫相机——机器视觉中无限制物体的检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 在机器视觉中,在检测连续物体或者滚动物体时,线扫相机是最佳的解决方 ...

  3. Unity 判断物体是否是在相机视野内

    你玩吃鸡游戏有没有这样的经历,往往只有当枪在你的视野内时,才可以捡起,而如果你背对枪,就算距离很近时,也没有办法捡起.如何用Unity来实现类似的功能呢,来学习吧! Mesh Renderer: Me ...

  4. Flash游戏教程:控制物体运动三法

    现在用Flash开发的游戏是越来越多了.很多朋友也很想学习用Flash制作游戏的方法.大家知道,不管在什么游戏中,实现物体的运动是游戏的前提,而不同的游戏里物体移动的方式又不尽相同.所以,想学习制作F ...

  5. css3运动框架,模拟现实物体运动的js动画库框架-Anima

    Anima是一款可以同时控制许多对象进行动画的js插件.并且每一个对象都有它们各自的质量和密度以模拟现实生活中的物体.CSS动画有一些限制,最主要的是你不可以真正完全的控制它们.如果不使用一些技巧的话 ...

  6. python简单练习 -统计文本词频并用柱状图显示

    函数功能:统计文本中单词频率,并用柱状图显示前10个最高的单词 这里统计的是函数所在文件本身 import turtlecount = 10 data = [] words = [] # y ySca ...

  7. 工业检测中物距、像距和焦距的关系相机视野的计算方法

    工业检测中物距.像距和焦距的关系&&视野的计算方法 一.物距.像距和焦距的关系 1.定义 2.凸透镜成像示意图 3.三者关系 (1)焦距公式 (2)分析 4.凸透镜成像原理中三者的关系 ...

  8. 两个一样的图像相除会怎么样_【壮凌自动化分析】一种动力电池生产中基于图像运动模糊的速度检测方法...

    一种动力电池生产中基于图像运动模糊的速度检测方法 1.西南大学 电子信息工程学院,重庆 400715) 2.非线性电路与智能信息处理重庆市重点实验室,重庆 400715) 1.当前背景与成熟方法介绍 ...

  9. MIT:大脑如何跟踪运动中的物体?

    来源:脑健康联盟 抓住一个弹起的球,或者用球拍击球,这两种行动都需要合理地估算触球时间.一直以来,神经科学家都相信,大脑是通过计算物体的运动速度来完成这些动作的. 然而,麻省理工学院的一项新研究表明, ...

  10. 教你在Python中构建物体检测系统(附代码、学习资料)

    作者:FAIZANSHAIKH 翻译:闫晓雨 校对:张玲 本文约3200字,建议阅读10分钟. 本文介绍物体检测技术以及解决此领域问题的几种不同方法,带你深入研究在Python中如何构建我们自己的对象 ...

最新文章

  1. Java8的集合:HashSet的实现原理
  2. 世界欠他一个图灵奖! LSTM之父的深度学习“奇迹之年”
  3. We7 从这里开始---安装we7
  4. PPT 2016的加解密功能
  5. 计算机 java_Java程序到底是如何运行的?
  6. imageview不显示图片
  7. Yammer从Scala转向Java
  8. 20151118小问题
  9. 为MFC中的ListBox添加水平滚动条
  10. V210 UART 整体流程
  11. SpringMVC 配置注解的映射器、适配器(重点)
  12. 如何攻克 C++ 中复杂的类型转换?
  13. mysql间隙锁触发条件,详解系列文章
  14. 【数据处理】reshape2包
  15. SQL:pgsql查询一段时间内每个小时的首条数据,为空返回0
  16. Linux中Vim的安装
  17. oracle闰年,oracle 闰年判断
  18. 以XSUB、XPUB为例,浅谈ZeroMQ的传输桥接(转发代理)
  19. 桌面运维常见问题解决办法②
  20. Apple Swift学习资料汇总

热门文章

  1. nginx 做代理转发 对文件上传下载有影响速度吗_少年: Nginx了解下
  2. jquery 获取整个表单_15个表单验证jQuery插件和库
  3. python爬虫重定向问题_爬虫学习(1)
  4. html字体加粗代码_9102年了,公众号还不会换字体?
  5. 大学物理光学思维导图_思维导图真的需要学吗?(附资料)
  6. McBSP初始化以及和EDMA的结合使用(C64X DSP)
  7. WCDMA中的基本概念
  8. 辽宁移动客服呼叫中心两级质检管理效果佳
  9. Excel—身份证生日提取
  10. Alert提示框插件