分割移动微小物体

本文介绍了一种基于前后帧差分的目标跟踪方法。通过计算连续两帧之间的差分图像,并找到该差分图像中最亮点的位置来实现对微小移动物体的跟踪。使用了OpenCV库进行图像处理与展示。
思路:
1. 前后两帧相减,得到差分图像
2.在差分图像里求像素最大的点(最亮的点)
这样就得到,移动微小物体

#include 
" check.h "
#include 
< iostream.h >                             
void  main()
{
    DWORD t1,t2;

    IplImage 
*frame=0;
    CvCapture 
*capture = cvCaptureFromAVI("E:\\跟踪\\有源窄滤波片2m30fps_2.avi");
    CCheck check;

    cvNamedWindow( 
"目标跟踪"1 );//创建窗口

    frame 
= cvQueryFrame(capture);
    check.Init(frame);

    
while(1)
    
{
        frame 
= cvQueryFrame(capture);
        
if(!frame)
        
{
            
break;
        }

        t1 
= ::GetTickCount();
        CvPoint point 
= check.point(frame);
        IplImage 
*show = cvCloneImage( frame );
        cvCircle(show, point, 
10, cvScalar(0,255,0), 2);
        cvShowImage(
"目标跟踪",show);
        cvReleaseImage( 
&show );    
        cvWaitKey(
1);

        t2 
= ::GetTickCount();
        cout 
<< t2-t1 << endl;

    }

    cvReleaseCapture(
&capture);

    cvDestroyWindow(
"目标跟踪");

}

#ifndef CHECK_H
#define  CHECK_H

#include 
" cv.h "
#include 
" highgui.h "
#include 
" cvcam.h "
#include 
" check.h "

#define     _I8(image,x,y)        (*((unsigned char*)(image)->imageData+(image)->widthStep*(y)+(x)))     // 直接调用图像的像素,x、y为整数(图像数据应为32F)

#define     _I32(img,x,y) ((float*)((img)->imageData + (img)->widthStep*(y)))[(x)]

class  CCheck
{
private:
    
int px,py;
    
int width,height;
    IplImage 
*frame1;    //当前帧
    IplImage *frame2;    //前一帧



public:
    CCheck();
    
~CCheck();
    
void    Init(IplImage *img);
    CvPoint    point(IplImage 
*img);
}
;

#endif

#include  " check.h "
#include 
< iostream.h >                             
void  main()
{
    DWORD t1,t2;

    IplImage 
*frame=0;
    CvCapture 
*capture = cvCaptureFromAVI("E:\\跟踪\\有源窄滤波片2m30fps_2.avi");
    CCheck check;

    cvNamedWindow( 
"目标跟踪"1 );//创建窗口

    frame 
= cvQueryFrame(capture);
    check.Init(frame);

    
while(1)
    
{
        frame 
= cvQueryFrame(capture);
        
if(!frame)
        
{
            
break;
        }

        t1 
= ::GetTickCount();
        CvPoint point 
= check.point(frame);
        IplImage 
*show = cvCloneImage( frame );
        cvCircle(show, point, 
10, cvScalar(0,255,0), 2);
        cvShowImage(
"目标跟踪",show);
        cvReleaseImage( 
&show );    
        cvWaitKey(
1);

        t2 
= ::GetTickCount();
        cout 
<< t2-t1 << endl;

    }

    cvReleaseCapture(
&capture);

    cvDestroyWindow(
"目标跟踪");

}

转载于:https://www.cnblogs.com/wqj1212/archive/2007/12/21/1009689.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值