Проблема использования памяти OpenCV с огромными изображениями - PullRequest
1 голос
/ 12 марта 2020

Я осознал проблему использования памяти при попытке отобразить огромные изображения, такие как 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 вместо создания нового?

...