• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: C/C++
  • 标签: C++  三帧差法  

资源简介

基于C++的三帧差法,经过验证OK。

资源截图

代码片段和文件信息

/*

export PKG_CONFIG_PATH=/raid/zouyan/bin/lib/pkgconfig
export LD_LIBRARY_PATH=/raid/zouyan/bin/lib:$LD_LIBRARY_PATH

gcc ThreeFrmDiff.cpp -o ThreeFrmDiff ‘pkg-config --cflags opencv‘ \
‘pkg-config --libs opencv‘ -lm -L/usr/local/share/OpenCV/3rdparty/lib/ -lstdc++

*/

#include 
#include 
#include 

int CallTime = 0;//定义调用次数计数器  
IplImage* BackGroundImage;//上一帧灰度图  
IplImage* DiffImage_1;//上一帧差分图的二值化图  
  
void ThreeFrmDiff(IplImage* pColorIn)  
{  
    CallTime++;  
    if(CallTime > 10)//防止溢出  
    {  
        CallTime = 10;  
    }  
  
    CvSize ImageSize = cvSize(pColorIn->widthpColorIn->height);  
    IplImage* GrayImage = cvCreateImage(ImageSizeIPL_DEPTH_8U1);//当前帧的灰度图  
    IplImage* GxImage = cvCreateImage(ImageSizeIPL_DEPTH_8U1);//当前帧的X方向梯度图  
    IplImage* GyImage = cvCreateImage(ImageSizeIPL_DEPTH_8U1);//当前帧的Y方向梯度图  
    IplImage* DiffImage = cvCreateImage(ImageSizeIPL_DEPTH_8U1);//当前帧的差分图  
    IplImage* DiffImage_2 = cvCreateImage(ImageSizeIPL_DEPTH_8U1);//前一帧差分图  
    IplImage* pyr = cvCreateImage(cvSize((ImageSize.width&-2)/2(ImageSize.height&-2)/2)81); //进行腐蚀去除噪声的中间临时图片  
  
    uchar* DiffImageData_2;  
    DiffImageData_2 = (uchar*)DiffImage_2->imageData;//得到前一帧差分图的数据  
  
    int heightwidthstep;//定义图像的高,宽,步长  
    int SumInRect = 0;//指定矩形内图像数据之和  
    int y1 y2 x1 x2;//对运动目标画框时的四个坐标点位置  
    y1 = 0;  
    y2 = 0;  
    x1 = 0;  
    x2 = 0;  
  
    char Kx[9] = {10-120-210-1};//X方向掩模,用于得到X方向梯度图  
    char Ky[9] = {121000-1-2-1};//Y方向掩模,用于得到Y方向梯度图  
    CvMat KXKY;  
    KX = cvMat(33CV_8SKx);//构建掩模内核  
    KY = cvMat(33CV_8SKy);//构建掩模内核  
  
    cvCvtColor(pColorInGrayImageCV_BGR2GRAY);//将当前帧转化为灰度图  
    cvSmooth(GrayImageGrayImageCV_GAUSSIAN77);//进行平滑处理  
    cvFilter2D(GrayImageGxImage&KXcvPoint(-1-1));//得到X方向的梯度图  
    cvFilter2D(GrayImageGyImage&KYcvPoint(-1-1));//得到Y方向的梯度图  
    cvAdd(GxImageGyImageGrayImageNULL);//得到梯度图  
  
    height = GrayImage->height;  
    width = GrayImage->width;  
    step = GrayImage->widthStep;  
  
    CvRect rect;//定义矩形框  
  
    if(CallTime == 1)//如果是第一帧  
    {  
        //对Image_1BackGroundImageDiffImage_1进行内存申请  
        BackGroundImage = cvCreateImage(ImageSizeIPL_DEPTH_8U1);  
        DiffImage_1 = cvCreateImage(ImageS

评论

共有 条评论