2012-04-25 5 views
0

Я обновляю старый код на C с помощью API C API OpenCV, и мне нужно загрузить не менее 300 изображений в памяти, чтобы сделать с ними некоторые алгоритмы.Загрузите набор изображений в память с opencv

Итак, я думал, что могу загрузить эти изображения в память, чтобы быстрее выполнять операции, а не загружать с диска и делать одну операцию.

Каков наилучший способ сделать это?

ответ

1

Если вы работаете с кодом C, ваши изображения будут автоматически оставаться в памяти до тех пор, пока вы их явно не выпустите. Просто позвоните cvLoadImage на каждое изображение, которое вы хотите загрузить с диска. Я бы порекомендовал вам хранить указатели IplImage* в большом массиве, чтобы вы не потеряли их. Когда вы закончите, просто вызовите cvReleaseImage, и память будет освобождена.

Как вы упомянули, вам придется следить за тем, как вы загружаете, что у вас не хватает памяти. Если вы это сделаете, у вас не будет выбора, кроме как загрузить только подмножество в память и оставить остальное на диске.

+0

Спасибо, аардварк. Я сделал большой массив IplImage * и загрузил все изображения в память. Это отлично работает для меня. – edsonlp1

0

Я полагаю, что увеличение производительности от этого будет настолько мало для большинства приложений, что это даже не стоит того. Единственный способ убедиться, что будет какая-то прибыль, - это сделать это и измерить время.

Проблема с вашим подходом заключается в том, что в зависимости от размера изображений вы можете исчерпать RAM-память, чтобы сохранить их все сразу.

+0

Uhhh ... Повышение производительности от предварительной загрузки данных в память с диска не стоит проблем? Не могли бы вы объяснить? – zrxq

+0

Мне бы хотелось увидеть некоторые исследования, в которых говорится, что эта практика ВСЕГДА стоит того. Дело в том, что это может быть неверно для каждого отдельного приложения. edsonlp1 должен будет проверить и измерить его выигрыш, прежде чем он обосновывается для подхода. – karlphillip

+0

Я думаю, что это полностью зависит от того, могут ли операции выполняться последовательно на изображениях или нет. Если операции не могут выполняться последовательно (т. Е. Делать все операции над одним изображением, а затем переходить к следующему), тогда будет огромная прибыль от сохранения изображений в памяти. В противном случае нет смысла, потому что вам все равно придется загружать их и сохранять обратно на диск. Там могут быть мягкие выигрыши от загрузки в одном потоке при обработке в другом, но они, вероятно, будут небольшими ... – aardvarkk

Смежные вопросы