Я осознал проблему использования памяти при попытке отобразить огромные изображения, такие как 2 ГБ изображения 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,5 ГБ .
Так что я думаю, что он создает новые копии каждый раз, когда я называю imread, normalize и imshow.
Есть ли способ преодолеть эту проблему? Я думаю, что, возможно, я могу вручную нормализовать исходное изображение, но возможно ли использовать imshow со ссылкой на мой исходный объект Mat вместо создания нового?