|
各位高手大家好,小弟是opencv的新手
目前正在作一个专题
撷取红光的影像
但是不知道为什么记忆体最后无法消除
知道的方法都试了
所以恳切希望各位高手能帮小弟看一下程式
看看是否有哪里漏掉了
感谢万分
#include <cv.h>
#include <highgui.h>
#include <stdio.h>
int main(int argc, char** argv)
{
char*filename ="test1.bmp";
IplImage *img ,*img2,*imgResult;
CvCapture* capture;
//翻转用的空间
CvMat *Matrix1;
CvSize ImageSize1 = cvSize(352,288);
CvSize ImageSize2 = cvSize(352,288);
img = cvCreateImage(ImageSize1,IPL_DEPTH_8U,3);
imgResult = cvCreateImage(ImageSize2,IPL_DEPTH_8U,3);
Matrix1=cvCreateMatHeader(ImageSize1.height,ImageSize1.width,CV_8UC3);
//翻转的定义
capture = cvCaptureFromCAM(0);
cvNamedWindow("mainWin", CV_WINDOW_AUTOSIZE);
cvMoveWindow("mainWin", 0, 100);
uchar Blue[288][352];
uchar Green[288][352];
uchar Red[288][352];
while(cvGrabFrame(capture))
{ int a,c=0;
a++;
//显示红色部分
for(int i=0;i<img->height;i++)
{
for(int j=0;j<img->widthStep;j=j+3)
{
Blue[(int)(j/3)]=img->imageData[i*img->widthStep+j];
Green[(int)(j/3)]=img->imageData[i*img->widthStep+j+1];
img->imageData[i*img->widthStep+j]=0;
img->imageData[i*img->widthStep+j+1]=0;
}
}
cvShowImage("mainWin", img);
cvMoveWindow("mainWin", 0, 0);
img=cvRetrieveFrame(capture);
//上下相反
cvGetMat(img,Matrix1);
cvFlip(Matrix1,Matrix1,0);
img2=cvLoadImage(filename);
//翻转图
cvFlip(img2,img2,0);
c=a%2;
if(c==1)
{
cvSaveImage(filename,img);
cvNamedWindow("Window",1);
cvShowImage("Window",img2);
cvMoveWindow("Window", 450, 0);
//两张数组相减
cvAbsDiff( img2,img,imgResult);
cvNamedWindow("Result",1);
cvShowImage("Result", imgResult);
cvMoveWindow("Result", 900, 0);
}
//delay time
void cvRelease(char*filename);
int key=cvWaitKey(6);
if( cvWaitKey(2) >= 0 )
break;
}
cvReleaseImage(&img);
cvReleaseImage(&img2);
void cvRelease(char*filename);
cvReleaseImage(&imgResult);
cvReleaseMatHeader(&Matrix1) ;
cvReleaseMat(&Matrix1) ;
cvDestroyWindow("mainWin");
cvDestroyWindow("Window");
cvDestroyWindow("Result");
cvReleaseCapture(&capture);
return 0;
} |
|