-1

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

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

现在,就像我说的那样,我在编程方面真的很缺乏经验,而且我找不到代码有什么问题,所以如果解决方案对你来说很明显,请原谅我。如果有人可以帮助我解决代码中的内存问题,我将非常感激,这样我就可以将它用于我的项目。

谢谢!

(需要 OpenCV 库和 black.jpg)

4

1 回答 1

1

这是问题之一。您正在克隆大量图像并且只发布最后一个。

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()有与上面类似的泄漏。

于 2013-06-07T01:53:42.143 回答