跟一位学院的老师做SRP快一年了,老师一直要我们负责软件部分。其中软件只要是计算机视觉,在VC6.0下使用OpenCV跟踪摄像头下的一个运动物体。虽然之前也写过一个模式识别的程序,但是那次是使用模板匹配函数MatchTemplate来写的MatchTemlate函数对于不旋转的物体跟踪效果很好,我们最后写的程序跟踪的很稳定。但是现在我们要跟踪的模板是旋转的,这样就想到了使用Hu不变距的性质来实现。函数原型如下

       double cvMatchShapes( const void* object1, const void* object2, int method, double parameter=0 );
       MatchShapes是OpenCV提供的一个根据计算比较两张图像Hu不变距的函数,函数返回值代表相似度大小,完全相同的图像返回值是0,返回值最大是1。这可以用在在一堆照片中搜索出两张相同或相同程度最大的图像。虽然网上有很多关于这个函数匹配两张图像的程序或例子,但是还没有看到有人使用它来跟踪一个旋转的物体。一个最重要的原因是运算时间问题。比如一张1000*600的图像里根据模板搜索出位置,时间不下于半分钟,这就大大限制了它在处理视频流方面的使用。但是这一次我与同学采用的方法是继承性的跟踪搜索,由于我们摄像头下物体运动的速度不大,大概20多个像素距离,那么,我们只需要在上一次搜索出的位置四周扩大20像素这个范围上搜索即可,这样时间就大大缩短了。我们可以使用一个静态变量来存放函数 MatchShapes的返回值,假如某一帧的返回值比上一帧的返回值小则把这一次的坐标信息保留下来。
void CHuDlg::OnTimer(UINT nIDEvent)
{
    // TODO: Add your message handler code here and/or call default
    IplImage *temp = cvQueryFrame( pCapture );  //抓取一帧
    if(!temp)    //假如是空指针,则表明播放完毕,关掉定时器并返回
    {     KillTimer(1);   //假如播放完则停止定时器,并返回
return;
    }
    cvCvtColor(temp,src,CV_BGR2GRAY);  //图像彩色变灰阶,3通道变1通道,MathchShapes匹配的图像要是灰阶
    cvFlip(src);   //翻转图像,
if(cutok)      //假如鼠标已经截好模板,则进入匹配过程
    {
        // TODO: Add your control notification handler code here
         static CvRect pos;   //存储匹配最相似区域
         static CvRect rect; //指定剪切矩形区域的范围,以上两个变量一定要是静态的,或者是全局的
         double result=1;   //匹配结果,初始值为1
         int i,j,imax,jmax;
        if(cutpoint)    //只是一开始是进入
         {
            pos.width=RoiImg->width;    //RoiImg是鼠标截图的区域
                pos.height=RoiImg->height;
            pos.x=dx*p1.x;      //关于鼠标截图的一个比例系数,可以先不管
            pos.y=dy*p1.y;
            rect.width =   RoiImg->width;   //rect用来代表模板逐行逐列匹配是的位置
                rect.height =  RoiImg->height;
            cutpoint=false;     //下次不用进入初始化
         }
        imax=pos.x+15+RoiImg->width;     //搜索位置的终点右移15个像素
         jmax=pos.y+15+RoiImg->height;    //搜索位置的终点下移15个像素
        for(i=(pos.x-15);i<imax;i+=1)
             for(j=(pos.y-15);j<jmax;j+=1)
             {    //逐列搜索
                  rect.x=i;
                  rect.y=j;
                  cvSetImageROI(src, rect); //设置ROI区域
                  double matching=cvMatchShapes( src, RoiImg, 3);   ///匹配
                  if(matching<result)    //使用冒泡法保存匹配结果最小的那一次
                  {
                       result=matching;
                       pos.x=i;
                       pos.y=j;
                  }
                  cvResetImageROI(src);
             }
           cvRectangle(src,cvPoint(pos.x,pos.y),cvPoint(pos.x+pos.width,pos.y+pos.height),cvScalar(222,0,192),2,8,0);  //框出匹配的结果
    }
ShowPicture(IDC_srcp,src); 
//显示画框以后的图像
   CDialog::OnTimer(nIDEvent);}

转载请注明出处 http://blog.csdn.net/chenhezhuyan

使用cvMatchShapes对旋转物体的跟踪相关推荐

  1. se(3)-TrackNet: 数据驱动的动态6D物体姿态跟踪, 基于合成域的图片残差校准

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 标题:se(3)-TrackNet: Data-driven 6D Pose Trackingby C ...

  2. Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按

    Unity触摸屏幕 拖拽物体 旋转物体 放大缩小物体 单击 双击 长按 拖拽物体 using System.Collections; using System.Collections.Generic; ...

  3. 谷歌最新开源BundleTrack: 无需任何CAD模型的6D物体姿态跟踪算法

    视频地址:在公众号「3D视觉工坊」,后台回复「谷歌X实习生」,即可直接下载. 最近,谷歌X的实习生Bowen Wen新开源了用于6D物体姿态跟踪的代码BundleTrack,该工作已经被今年的IEEE ...

  4. 美国Rutgers大学最新开源:端到端6D物体姿态跟踪,无需标注数据集!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 最近,美国Rutgers大学PRACSYS Lab新开源了用于6D物体姿态跟踪的代码Se(3)-Tra ...

  5. AE物体表面跟踪特效合成高级插件:Lockdown for Mac

    Lockdown for Mac是一款AE物体表面跟踪特效合成高级插件,支持安装在最新版本的After Effects 2021中使用,Lockdown插件支持跟踪运动物体扭曲不平的表面,你可以进行美 ...

  6. AE物体表面跟踪特效合成高级插件:Lockdown for Mac 支持ae2021

    Lockdown for Mac是一款AE物体表面跟踪特效合成高级插件,支持安装在最新版本的After Effects 2021中使用,Lockdown插件支持跟踪运动物体扭曲不平的表面,你可以进行美 ...

  7. unity滑动屏幕旋转物体

    超级简单,但是注意,有坑! 首先创建一个脚本,把下面的代码复制进去就好啦,注意类名要和脚本名一样哦,自己改一下就好啦! using System.Collections; using System.C ...

  8. (Python)从零开始,简单快速学机器仿人视觉Opencv---运用三:物体运动跟踪

    教程: 博主之前写了23节关于使用OpenCV的教程,欢迎大家阅读: (Python)从零开始,简单快速学机器仿人视觉Opencv-第一节:OpenCV的图像读取显示及保存 (Python)从零开始, ...

  9. PX4无人机-Gazebo仿真实现移动物体的跟踪

    原文链接PX4无人机-Gazebo仿真实现移动物体的跟踪末尾有演示视频 这个学期我们有一个智能机器人系统的课设,我们组分配到的题目是<仿真环境下使用无人机及相机跟踪移动物体>,本文主要记录 ...

最新文章

  1. 计算机视觉与深度学习 | 复杂环境下的视觉同时定位与地图构建(SLAM)
  2. 在WinAVR中设置Makefile自动编译多个源文件
  3. mysql 8.0用doc修改密码_MYSQL8.0修改密码流程
  4. 是父母讲给小孩子听的,但是成人世界更需要这些启示。
  5. matlab用mex编译.c文件报错---“重定义;不同的基类型”、“宏重定义”等
  6. 2021年,对话系统该如何学?
  7. MFC修改窗口无标题和标题信息,修改执执行文件图标
  8. 台湾厂商:大陆投资DRAM工厂可能破坏全球市场
  9. Java CLH队列
  10. Repast HPC Tutorial学习操作中出现的问题及解决办法(更新ing)
  11. UltraISO9.3.0.2610中文绿色注册版
  12. 基于原生js且非canvas实现的中国象棋(第一版)
  13. 源码编译Redis Desktop Manager参考
  14. k8s中Ingress安装
  15. ★【树状数组】【NOI2008】糖果雨
  16. 微信登录流程图(转)
  17. 手机吃鸡语音服务器异常是怎么回事,《绝地求生》新版本里实用功能介绍 卡语音怎么解决...
  18. SpringCloud - Spring Cloud Netflix 之 Hystrix熔断器(七)
  19. HTTP协议-How2j教程
  20. Pandas 官方文档 翻译

热门文章

  1. canvas绘图 echarts 基本使用
  2. 主题 04:如何设计一个复杂的系统(下)
  3. a 标签发送put请求_HTTP PUT请求该如何传输请求参数呢?
  4. 关于U盘装系统的那点破事儿---No bootable device found
  5. 设置等级对照表的表格
  6. 家用计算机按键不灵怎么修,电脑键盘两个ctrl键失灵怎么回事?ctrl键失灵的修复方法...
  7. Font shape `OMX/cmex/m/n‘ in size <10.53937> not available (Font) size <10.95> substituted.
  8. MOOC《深度学习基础》笔记(一)
  9. 【uni-app学习】uni-app低功耗蓝牙采坑记录
  10. excel制作跨职能流程图_excel制作流程图的方法步骤图