gpt4 book ai didi

java - javacv中的内存泄漏

转载 作者:搜寻专家 更新时间:2023-11-01 00:51:16 27 4
gpt4 key购买 nike

我正在尝试制作一个从网络摄像头拍摄照片的程序,然后调整它的大小,将其转换为 HSV,并对它进行一些阈值处理,以找到特定的颜色。完成此操作后,我使用阈值图像查找轮廓,并打印不同轮廓的 x、y 坐标。这是一遍又一遍地重复,使网络摄像头的处理实时。

除了我每运行 2 秒就用掉大约 100 MB 的 RAM 之外,一切都运行良好。

到目前为止,我发现如果我使用静态图片而不是来自网络摄像头的实时图像,我可以显着减少内存泄漏,尽管仍然会消耗内存。

下面是我的代码:

public class Application {
private CaptureImage ci;
private ImageUtils iu;
private CanvasFrame canvasContours;

IplImage grabbedFrame;
IplImage resizedFrame;
IplImage thresholdedFrame;
IplImage clonedImage;

public Application(){
ci = new CaptureImage();
iu = new ImageUtils();
canvasContours = new CanvasFrame("contours");

}

public void frameProcessing(){

grabbedFrame = ci.grabImage();
//below call used for testing purposes
//grabbedFrame = (IplImage) opencv_highgui.cvLoadImage("testingImage.jpg");
//cloning image due to highgui guidelines.
clonedImage = opencv_core.cvCloneImage(grabbedFrame);
resizedFrame = iu.resizeImage(clonedImage);

opencv_core.cvReleaseImage(clonedImage);

thresholdedFrame = iu.thresholdImage(resizedFrame);


IplImage contoursFrame = iu.findContours(thresholdedFrame, resizedFrame);

canvasContours.showImage(contoursFrame);


}
}

grabImage 只是来自 javacv 的标准 frameGrabber,它看起来像这样:

public class CaptureImage {
private final OpenCVFrameGrabber grabber;
private IplImage img = null;


public CaptureImage(){
// 0-default camera, 1 - next...so on
grabber = new OpenCVFrameGrabber(0);
try {
grabber.start();
} catch (Exception e) {
System.err.print("Failed to initialize camera");
e.printStackTrace();
}

}

public IplImage grabImage(){

try {

//A grabbed image from Logitech webcam is in following resolution: 1200x800px

img = grabber.grab();



} catch (Exception e) {

e.printStackTrace();
}
return img;
}

非常感谢您能给我的任何帮助,如果您需要更多信息,请尽管询问!

/杰斯珀

最佳答案

从您的堆转储中,使用的内存都是从 native 代码引用的字节和整数数组。查看您的代码,我发现您只为克隆图像而不是原始图像调用 cvReleaseImage

关于java - javacv中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15324712/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com