OpenCV中文网站

 找回密码
 立即注册
搜索
热搜: 安装 配置
查看: 4569|回复: 3

求救,webcam 擷取紅光動態圖片,記憶體無法消除

[复制链接]
发表于 2011-4-11 19:50:42 | 显示全部楼层 |阅读模式
各位高手大家好,小弟是opencv的新手
目前正在作一个专题
撷取红光的影像
但是不知道为什么记忆体最后无法消除
知道的方法都试了
所以恳切希望各位高手能帮小弟看一下程式
看看是否有哪里漏掉了
感谢万分


#include <cv.h>
#include <highgui.h>
#include <stdio.h>
int main(int argc, char** argv)
{                              
   
   char*filename =&quot;test1.bmp&quot;;
   
   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(&quot;mainWin&quot;, CV_WINDOW_AUTOSIZE);
   cvMoveWindow(&quot;mainWin&quot;, 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(&quot;mainWin&quot;, img);
     cvMoveWindow(&quot;mainWin&quot;, 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(&quot;Window&quot;,1);
     cvShowImage(&quot;Window&quot;,img2);
     cvMoveWindow(&quot;Window&quot;, 450, 0);
       //两张数组相减
     cvAbsDiff( img2,img,imgResult);
     cvNamedWindow(&quot;Result&quot;,1);
     cvShowImage(&quot;Result&quot;, imgResult);
     cvMoveWindow(&quot;Result&quot;, 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(&quot;mainWin&quot;);
     cvDestroyWindow(&quot;Window&quot;);
     cvDestroyWindow(&quot;Result&quot;);
     cvReleaseCapture(&capture);
     return 0;
  
}
回复

使用道具 举报

发表于 2011-4-17 10:25:12 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-4-17 11:05:58 | 显示全部楼层

求救,webcam 擷取紅光動態圖片,記憶體無法消除

不好意思,我可能没有说明白
在执行完程式最后
都会释放记忆体
因此会用cvReleaseImage
cvDestroyWindow
cvReleaseCapture等等
来消除图片、视窗、视频
所占用的电脑记忆体
但是我没有办法消除他们
电脑的记忆体使用量会一直向上攀升
导致电脑会越跑越慢
不知道问题出在哪里
回复 支持 反对

使用道具 举报

发表于 2012-5-16 16:46:48 | 显示全部楼层

求救,webcam 擷取紅光動態圖片,記憶體無法消除

指针
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|OpenCV中文网站

GMT+8, 2024-4-28 06:34 , Processed in 0.009307 second(s), 16 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表