任务需求是一次性将大量图片拼接成一张大图,这里思路是使用多线程一次拼接5张图片
@Override
public void run() {
int index = i * 5;
MatVector images = new MatVector(5);
Mat image = new Mat();
System.out.println(Thread.currentThread().getName() + "-start:......");
//加载每张图片
for (int j = 0; j < 5; j++) {
if (!"".equals(pics[j + index])) {
image = imread(pics[j + index]);
}
images.put(j, image);
image.release();
}
Stitcher stitcher = Stitcher.createDefault();
stitcher.setWaveCorrection(false);//关闭波纹校正
//结果存储对象
image = new Mat();
//进行拼接
stitcher.stitch(images, image);
imwrite("D:\cvtest2\" + i + ".jpg", image);
//释放Mat对象
images.deallocate();
image.release();
}
读取图片之后的Mat对象、成果Mat对象和装小图片的集合对象都进行了释放,但是程序在拼接好三四十张图片之后就会报内存溢出错误
根据执行现象猜测是程序中某一块内存得不到释放,随拼接1次数累计,先行记录。
已解决
解决方案:将代码中能释放的对象全部进行释放