Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+中内存使用过多+;OpenCV鼠标点代码_C++_Memory_Opencv_Mouse_Point - Fatal编程技术网

C++ C+中内存使用过多+;OpenCV鼠标点代码

C++ C+中内存使用过多+;OpenCV鼠标点代码,c++,memory,opencv,mouse,point,C++,Memory,Opencv,Mouse,Point,大家好,感谢你们提供了许多关于stackoverflow的有用话题,因为我在编程方面非常缺乏经验,所以它们对我帮助很大。作为大学项目的一部分,我试图在商务卡上实现透视修正,以使用OpenCV库为C++编写OCR。我发现通过Canny和Hough实现的自动角点检测有些不可靠,这取决于特定的卡和背景,因此我现在想实现一种手动选择角点的方法 我在sourceforge()上找到了用户ajithsri编写的以下代码(OpenCVSelect.cpp),这正是我所需要的。然而,在玩了一段时间后,它突然崩溃

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

我在sourceforge()上找到了用户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);

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


findImg()
具有与上述类似的泄漏。

您应该使用cv2 api。具体使用Mat而不是IplImage。编写自己的透视变换应该不会那么困难。OpenCV提供了非常有用的鼠标交互教程。如果您有四个角点,可以使用cv::warpPerspective来修复图像(同样,可以找到很多关于这方面的教程),谢谢!实际上,我有warpPerspective的最后一部分,仅此一部分就可以很好地工作。我只需要找到一种方法来设置角点而不产生内存泄漏。我想没有办法绕过教程了!非常感谢你!我还觉得这篇文章写得很糟糕,必须有更好的解决方案。然而,我很高兴我在互联网上找到的每一个被剪掉的代码,所以我不想再抱怨什么了。我会尽力纠正你说的话。如果还有很多其他的问题,我想最好从我的教程开始。再次感谢!我只是想再次感谢你!我将所有内容都更改为cv2,并修复了您所说的内容,现在它可以使用大约8MB的内存工作,而不是在崩溃之前每次单击加起来1800 Mb:)
         IplImage *img2=img0;
         IplImage *img2=cvCloneImage(img0);