带有大图像的OpenCV内存使用问题

问题描述 投票:1回答:1

当我尝试显示2GB TIFF图像之类的大图像时,我意识到内存使用问题。代码如下:

Mat image, output;

image = imread("img.tif", IMREAD_UNCHANGED);
//Memory usage : 2GB

normalize(image, output, 0, 0xFFFF, cv::NORM_MINMAX);
//Memory usage : 4GB

namedWindow("Display Image", WINDOW_NORMAL);
imshow("Display Image", output);
//Memory usage : 6.5GB

waitKey(0);

当我在Ubuntu环境中以调试模式逐步运行该程序时,我发现系统监视器的内存使用量正在急剧增加。

当点击imread时,我的程序使用了大约2GB的内存。调用normalize时,它增加到大约4GB。最后,当调用imshow时,它会增加到〜6.5GB

因此,我认为每次我称为读取,规范化和显示时,它都会创建新副本。

有什么办法可以解决这个问题?我的想法是,也许我可以手动标准化我的原始图像,但是可以使用imshow引用我的原始Mat对象而不是创建一个新对象吗?

opencv memory tiff imshow imread
1个回答
0
投票

为了避免过多的内存消耗,您可以将图像转换为灰度图像。

© www.soinside.com 2019 - 2024. All rights reserved.