分割移动微小物体
思路:
1. 前后两帧相减,得到差分图像
2.在差分图像里求像素最大的点(最亮的点)
这样就得到,移动微小物体

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

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

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

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

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

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

 }
    }
 cvReleaseCapture(&capture);
    cvReleaseCapture(&capture);

 cvDestroyWindow("目标跟踪");
    cvDestroyWindow("目标跟踪");

 }
}
 
 #ifndef CHECK_H
#ifndef CHECK_H
 #define CHECK_H
#define CHECK_H

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

 #define    _I8(image,x,y)        (*((unsigned char*)(image)->imageData+(image)->widthStep*(y)+(x)))    //直接调用图像的像素,x、y为整数(图像数据应为32F)
#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)]
#define    _I32(img,x,y) ((float*)((img)->imageData + (img)->widthStep*(y)))[(x)]

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



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

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

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

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

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

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

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

 }
    }
 cvReleaseCapture(&capture);
    cvReleaseCapture(&capture);

 cvDestroyWindow("目标跟踪");
    cvDestroyWindow("目标跟踪");

 }
}
 
1. 前后两帧相减,得到差分图像
2.在差分图像里求像素最大的点(最亮的点)
这样就得到,移动微小物体

 #include "check.h"
#include "check.h" #include <iostream.h>
#include <iostream.h>                             void main()
void main() {
{ DWORD t1,t2;
    DWORD t1,t2;
 IplImage *frame=0;
    IplImage *frame=0; CvCapture *capture = cvCaptureFromAVI("E:\\跟踪\\有源窄滤波片2m30fps_2.avi");
    CvCapture *capture = cvCaptureFromAVI("E:\\跟踪\\有源窄滤波片2m30fps_2.avi"); CCheck check;
    CCheck check;
 cvNamedWindow( "目标跟踪", 1 );//创建窗口
    cvNamedWindow( "目标跟踪", 1 );//创建窗口
 frame = cvQueryFrame(capture);
    frame = cvQueryFrame(capture); check.Init(frame);
    check.Init(frame);
 while(1)
    while(1) {
    { frame = cvQueryFrame(capture);
        frame = cvQueryFrame(capture); if(!frame)
        if(!frame) {
        { break;
            break; }
        } t1 = ::GetTickCount();
        t1 = ::GetTickCount(); CvPoint point = check.point(frame);
        CvPoint point = check.point(frame); IplImage *show = cvCloneImage( frame );
        IplImage *show = cvCloneImage( frame ); cvCircle(show, point, 10, cvScalar(0,255,0), 2);
        cvCircle(show, point, 10, cvScalar(0,255,0), 2); cvShowImage("目标跟踪",show);
        cvShowImage("目标跟踪",show); cvReleaseImage( &show );
        cvReleaseImage( &show );     cvWaitKey(1);
        cvWaitKey(1);
 t2 = ::GetTickCount();
        t2 = ::GetTickCount(); cout << t2-t1 << endl;
        cout << t2-t1 << endl;
 }
    } cvReleaseCapture(&capture);
    cvReleaseCapture(&capture);
 cvDestroyWindow("目标跟踪");
    cvDestroyWindow("目标跟踪");
 }
}
 #ifndef CHECK_H
#ifndef CHECK_H #define CHECK_H
#define CHECK_H
 #include "cv.h"
#include "cv.h" #include "highgui.h"
#include "highgui.h" #include "cvcam.h"
#include "cvcam.h" #include "check.h"
#include "check.h"
 #define    _I8(image,x,y)        (*((unsigned char*)(image)->imageData+(image)->widthStep*(y)+(x)))    //直接调用图像的像素,x、y为整数(图像数据应为32F)
#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)]
#define    _I32(img,x,y) ((float*)((img)->imageData + (img)->widthStep*(y)))[(x)]
 class CCheck
class CCheck {
{ private:
private: int px,py;
    int px,py; int width,height;
    int width,height; IplImage *frame1;    //当前帧
    IplImage *frame1;    //当前帧 IplImage *frame2;    //前一帧
    IplImage *frame2;    //前一帧


 public:
public: CCheck();
    CCheck(); ~CCheck();
    ~CCheck(); void    Init(IplImage *img);
    void    Init(IplImage *img); CvPoint    point(IplImage *img);
    CvPoint    point(IplImage *img); };
};
 #endif
#endif #include "check.h"
#include "check.h" #include <iostream.h>
#include <iostream.h>                             void main()
void main() {
{ DWORD t1,t2;
    DWORD t1,t2;
 IplImage *frame=0;
    IplImage *frame=0; CvCapture *capture = cvCaptureFromAVI("E:\\跟踪\\有源窄滤波片2m30fps_2.avi");
    CvCapture *capture = cvCaptureFromAVI("E:\\跟踪\\有源窄滤波片2m30fps_2.avi"); CCheck check;
    CCheck check;
 cvNamedWindow( "目标跟踪", 1 );//创建窗口
    cvNamedWindow( "目标跟踪", 1 );//创建窗口
 frame = cvQueryFrame(capture);
    frame = cvQueryFrame(capture); check.Init(frame);
    check.Init(frame);
 while(1)
    while(1) {
    { frame = cvQueryFrame(capture);
        frame = cvQueryFrame(capture); if(!frame)
        if(!frame) {
        { break;
            break; }
        } t1 = ::GetTickCount();
        t1 = ::GetTickCount(); CvPoint point = check.point(frame);
        CvPoint point = check.point(frame); IplImage *show = cvCloneImage( frame );
        IplImage *show = cvCloneImage( frame ); cvCircle(show, point, 10, cvScalar(0,255,0), 2);
        cvCircle(show, point, 10, cvScalar(0,255,0), 2); cvShowImage("目标跟踪",show);
        cvShowImage("目标跟踪",show); cvReleaseImage( &show );
        cvReleaseImage( &show );     cvWaitKey(1);
        cvWaitKey(1);
 t2 = ::GetTickCount();
        t2 = ::GetTickCount(); cout << t2-t1 << endl;
        cout << t2-t1 << endl;
 }
    } cvReleaseCapture(&capture);
    cvReleaseCapture(&capture);
 cvDestroyWindow("目标跟踪");
    cvDestroyWindow("目标跟踪");
 }
}
 
                    
                     
                    
                 
                    
                

 
     
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号