C++ C+中内存使用过多+;OpenCV鼠标点代码
大家好,感谢你们提供了许多关于stackoverflow的有用话题,因为我在编程方面非常缺乏经验,所以它们对我帮助很大。作为大学项目的一部分,我试图在商务卡上实现透视修正,以使用OpenCV库为C++编写OCR。我发现通过Canny和Hough实现的自动角点检测有些不可靠,这取决于特定的卡和背景,因此我现在想实现一种手动选择角点的方法 我在sourceforge()上找到了用户ajithsri编写的以下代码(OpenCVSelect.cpp),这正是我所需要的。然而,在玩了一段时间后,它突然崩溃了,让我产生了怀疑。看着任务管理器,在点击和移动点的同时,我注意到大量的内存被使用,直到程序崩溃才被释放 现在,就像我说的,我在编程方面真的没有经验,我找不到代码的错误,所以如果解决方案对你来说是显而易见的,请原谅我。 如果有人能帮我解决代码中的内存问题,我会非常感激,这样我就可以在我的项目中使用它了 谢谢大家!C++ C+中内存使用过多+;OpenCV鼠标点代码,c++,memory,opencv,mouse,point,C++,Memory,Opencv,Mouse,Point,大家好,感谢你们提供了许多关于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);