过度使用内存的c++ OpenCV鼠标点代码

Excessive memory usage in C++ OpenCV mouse point code

本文关键字:OpenCV 鼠标 代码 c++ 内存      更新时间:2023-10-16

大家好,感谢你们在stackoverflow上提供的许多有用的话题——它们帮助了我很多,因为我在编程方面非常缺乏经验。作为大学项目的一部分,我正试图在名片上实现透视校正,以便使用OpenCV库在c++中为OCR做准备。我发现通过Canny和Hough的自动角检测有点不可靠,这取决于特定的卡和背景,所以我现在想实现一种手动选择角的方法。

我在sourceforge (http://sourceforge.net/p/opencvselmov/code/ci/master/tree/)上找到了用户ajithsri的以下代码(OpenCVSelect.cpp),这正是我需要的。然而,在玩了一段时间后,它突然崩溃了,让我怀疑。查看任务管理器,同时点击和移动点,我注意到大量的内存被使用而不被释放,直到程序崩溃。

现在,就像我说的,当涉及到编程时,我真的没有经验,我找不到代码的问题,所以如果解决方案对你来说是显而易见的,请原谅我。如果有人能帮我解决代码中的内存问题,我将非常感激,这样我就可以在我的项目中使用它。

谢谢!

(需要OpenCV库和black.jpg)

这里有一个问题。你正在克隆大量的图像,只释放最后一个。

void showImage(){
    IplImage *img2=img0;
    for(int j=0;j<nop;j++){     
        img2 = cvCloneImage(img2);
              ...
              for(int k=j+1;k<nop;k++){
                 img2 = cvCloneImage(img2);
                 ...
               }
     }
     ...
     cvReleaseImage(&img2);

删除所有对cvCloneImage()的调用,并更改

         IplImage *img2=img0;

         IplImage *img2=cvCloneImage(img0);

这段代码写得很糟糕,可能还有很多其他问题。

findImg()也有类似的泄漏