qq_21019127 2015-12-07 02:02 采纳率: 100%
浏览 1316
已采纳

求大神寻找这段写视频代码的内存泄漏之处,菜鸟我实在找不出了

求大神围观~

 // OpenCVFindContours.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"  
#include "cxcore.h"   
#include "cv.h"   
#include "highgui.h"  

int _tmain(int argc, _TCHAR* argv[])
{
    CvCapture* pCapture = cvCreateCameraCapture(0);
    IplImage * pFrame;
    IplImage *psrc;
    IplImage *src = cvCreateImage(cvSize(700,700), IPL_DEPTH_8U,3);
    IplImage *gsrc = cvCreateImage(cvGetSize(src), IPL_DEPTH_8U,1);

    IplImage *dsw ;
    IplImage *dst;
    CvMemStorage *storage;
    CvSeq *first_contour;

    while(1)
    {
        psrc=cvQueryFrame(pCapture ); 

        cvResize(psrc,src,1);
        cvCvtColor(src,gsrc,CV_BGR2GRAY);

        dsw = cvCreateImage(cvGetSize(src), 8, 1);  
        dst = cvCreateImage(cvGetSize(src), 8, 3);

        storage = cvCreateMemStorage(0);  
        first_contour = NULL;  

        //turn the src image to a binary image  
        //cvThreshold(src, dsw, 125, 255, CV_THRESH_BINARY_INV);  
        cvThreshold(gsrc, dsw, 100, 255, CV_THRESH_BINARY);  

        cvFindContours(dsw, storage, &first_contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE);  
        cvZero(dst);  
        int cnt = 0;  
        for(; first_contour != 0; first_contour = first_contour->h_next)  
        {  
            cnt++;  
            CvScalar color = CV_RGB(rand()&255, rand()&255, rand()&255);  
            cvDrawContours(dst, first_contour, color, color, 0, 2, CV_FILLED, cvPoint(0, 0));  
            CvRect rect = cvBoundingRect(first_contour,0);
            cvRectangle(dst, cvPoint(rect.x, rect.y), cvPoint(rect.x + rect.width, rect.y + rect.height),CV_RGB(255, 0, 0), 1, 8, 0);
        }  

        printf("the num of contours : %d\n", cnt);  

        cvNamedWindow( "Source", 1 );  
        cvShowImage( "Source", src );  

        cvNamedWindow( "dsw", 1 );  
        cvShowImage( "dsw", dsw );  

        cvNamedWindow( "Components", 1 );  
        cvShowImage( "Components", dst );  

    cvReleaseMemStorage(&storage);

        char c=cvWaitKey(10);
        if(c==27)
            break;  
    }

    cvDestroyWindow("Source");
    cvDestroyWindow("dsw");
    cvDestroyWindow("Components");

    cvReleaseImage(&pFrame);
    cvReleaseImage(&gsrc);
    cvReleaseImage(&src);
    cvReleaseImage(&dsw);
    cvReleaseImage(&dst);

    //cvReleaseMemStorage(&storage);
    cvReleaseCapture(&pCapture);

    return 0;  
}

  • 写回答

1条回答 默认 最新

  • 云霏阳 2015-12-07 08:22
    关注

    1.建议将下面2行代码移到while循环里面最后的位置看看。
    cvReleaseImage(&dsw);
    cvReleaseImage(&dst);

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 DS18B20内部ADC模数转换器
  • ¥15 做个有关计算的小程序
  • ¥15 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动