vc2003与vc6.0差异
vc2003与vc6.0区别?
原来的代码是在vc2003编写的,我想改成能在vc6.0下运行,不知道都需要注意哪些?
代码如下:
原来的代码是在vc2003编写的,我想改成能在vc6.0下运行,不知道都需要注意哪些?
代码如下:
int _tmain(int argc, _TCHAR* argv[])
{//声明IplImage指针
IplImage* pFrame = NULL;
//三帧图像
IplImage* pFrame1 = NULL;
IplImage* pFrame2 = NULL;
IplImage* pFrame3 = NULL;
//三帧图像相减图像
IplImage* pFrImg1 = NULL;
IplImage* pFrImg2 = NULL;
//最终图像
IplImage* pFrImg = NULL;
//视频图像
CvCapture* pCapture = NULL;
//帧数
int nFrmNum = 0;
//创建窗口
cvNamedWindow("video", 1);//视频
/*cvNamedWindow("background",1);*/
cvNamedWindow("foreground",1);
//使窗口有序排列
cvMoveWindow("video", 30, 0);
/*cvMoveWindow("background", 360, 0);*/
cvMoveWindow("foreground", 690, 0);
if( !(pCapture = cvCreateFileCapture("d:\\1.avi")))
{
fprintf(stderr, "Can not open video file %s\n", argv[1]);
return -2;
}
//逐帧读取视频
while(pFrame = cvQueryFrame( pCapture ))
{
nFrmNum++;
//如果是第一帧,需要申请内存,并初始化
if(nFrmNum == 1)
{ pFrame1= cvCreateImage(cvSize(pFrame->width, pFrame->height),IPL_DEPTH_8U,1);
pFrame2= cvCreateImage(cvSize(pFrame->width, pFrame->height),IPL_DEPTH_8U,1);
pFrame3 = cvCreateImage(cvSize(pFrame->width, pFrame->height),IPL_DEPTH_8U,1);
pFrImg1= cvCreateImage(cvSize(pFrame->width, pFrame->height),IPL_DEPTH_8U,1);
pFrImg2= cvCreateImage(cvSize(pFrame->width, pFrame->height),IPL_DEPTH_8U,1);
pFrImg = cvCreateImage(cvSize(pFrame->width, pFrame->height),IPL_DEPTH_8U,1);
//转化成单通道图像再处理
cvCvtColor(pFrame, pFrame1, CV_BGR2GRAY);//第一帧放在背景前经图像
cvCvtColor(pFrame, pFrImg, CV_BGR2GRAY);//用作显示
cvShowImage("video", pFrame);
}
if (nFrmNum==2)
{
cvCvtColor(pFrame, pFrame2, CV_BGR2GRAY); //第二针
}
if (nFrmNum>=3)
{
cvCvtColor(pFrame, pFrame3, CV_BGR2GRAY);
cvAbsDiff(pFrame1,pFrame2,pFrImg1);
cvAbsDiff(pFrame2,pFrame3,pFrImg2);
cvAnd(pFrImg1,pFrImg2,pFrImg);
/*pBkImg->origin=1;
pFrImg->origin=1;*/
cvFlip(pFrImg,pFrImg,0);
//二值化前景图
cvThreshold(pFrImg, pFrImg, 40, 255.0, CV_THRESH_BINARY);
//进行形态学滤波,去掉噪音
/*cvDilate(pFrImg, pFrImg, 0, 1);
cvErode(pFrImg, pFrImg, 0, 1);*/
cvShowImage("video", pFrame);
/*cvShowImage("background", pBkImg);*/