2016-03-14 3 views
1

У меня есть очень большие мозаики GeoTiff (50 000 х 50 000 ячеек с целым числом 4). OpenCV возвращает None при использовании imread для этих изображений, но успешно читает уменьшенные изображения (2,880 x 3,840). Поскольку imread работает с обрезанными версиями одной и той же большой мозаики, это, по-видимому, проблема с размером изображения, а не с изображениями. У меня есть два вопроса:Какое самое большое изображение, которое можно прочитать в OpenCV?

  • Какое изображение наибольшее изображение imread?

  • is there a way to read a subset/ROI of an image in OpenCV (similar to band.ReadAsArray(xoff, yoff, xcount, ycount) в GDAL?

ответ

3

Максимальный размер ограничен максимальным значением size_t. Можно видеть, является функцией OpenCV setSize, что размер зависит от:

  • элемент Размер: размер базового типа, умноженной на количество каналов. Например. Mat4b (или Mat типа CV_8UC4) является 8*4 = 32

  • число элементов: количество элементов в матрице. Для 2D-матрицы просто rows * cols.

Для 32 бит строит, то общий размер матрицы: sizeof(type) * channels * rows * cols должно быть меньше, чем 2^32 = 4294967296.

В вашем случае, если матрица uchar с 4 каналами, размер будет: 8 * 4 * 50000 * 50000 = 80000000000 > 4294967296, и это слишком велико.

У вас могут быть большие изображения с 64-битной сборкой.

Нет, OpenCV не предоставляет функцию чтения с диска только ROI изображения. Для этого вам нужно полагаться на другие библиотеки.

+0

Спасибо за предложение о том, с чего начать искать. Чтобы быть откровенным, я думал, что использую 64-битные библиотеки. Поскольку я использую Anaconda для создания согласованной инструментальной цепочки на 5 разных платформах, у меня мало контроля над предоставленными пакетами. Я посмотрю глубже в 32/64-битный статус. – EBo

+0

Мне удалось получить изображение для чтения с помощью «img = bnd.ReadAsArray (1024, 2048, 1024, 1024)», но я подумал, что может быть способ сделать все это из OpenCV и сохранить код чище. Благодарим вас за подтверждение отсутствия функций ROI в OpenCV. – EBo

+0

Рад, что это помогло. Я не совсем уверен в 64-битных вещах, потому что у меня есть только 32-битные сборки. Но, глядя на код, я предполагаю, что он будет работать именно так. Пожалуйста, дайте мне знать, если мой ответ не совсем правильный. – Miki

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