Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Как уменьшить размер изображения при обработке изображений (scipy/numpy/python)

Автор вопроса: Hold_My_AngerОтветов: 3

Здравствуйте, у меня есть изображение (1024 x 1024), и я использовал команду "fromfile" в numpy, чтобы поместить каждый пиксель этого изображения в матрицу.

Как я могу уменьшить размер изображения (например, до 512 x 512), изменив эту матрицу a?

a = numpy.fromfile(( - path - ,'uint8').reshape((1024,1024))

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


РЕДАКТИРОВАТЬ:

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

Хосе сказал мне, что я могу взять только четный столбец и четную строку и поместить их в новую матрицу. Это уменьшит изображение до половины размера. Какую команду в scipy/numpy мне нужно использовать для этого?

Спасибо

  • Вопрос в том, что вы не понимаете, как это сделать в Python, или вы не понимаете, как масштабировать изображение, или и то, и другое? talonmies 22.05.2011
  • Длинный ответ заключается в том, что это зависит от типа изображения, которое вы только что прочитали. Короткий ответ/вопрос: почему вы не можете использовать библиотеку? Можете ли вы изменить размер PIL, а затем вы можете вызвать numpy.reshape()? Jordan 22.05.2011
  • изображение имеет расширение файла .dat, и программа для чтения, которую я получил, может прочитать изображение и поместить его в матрицу. Я сделал ошибку, поэтому я отредактировал сообщение и изменил массив на матрицу, поскольку он помещен в виде матрицы. Hold_My_Anger 23.05.2011
  • Теперь у меня проблема, как взять только четную строку и четный столбец из матрицы. Есть ли какая-нибудь функция в scipy или numpy, которая может это сделать? Hold_My_Anger 23.05.2011

pythonnumpyscipyimageimage-processing

Ответы

Ответ 1 · рейтинг 2 · José Carlos Méndez

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

Ответ 2 · рейтинг 21 · Mika Vatanen

Если вы хотите изменить размер до определенного разрешения, используйте scipy.misc.imresize:

import scipy.misc

i_width = 640
i_height = 480

scipy.misc.imresize(original_image, (i_height, i_width))

Ответ 3 · рейтинг 17 · tillsten

Используйте функцию масштабирования из scipy:

http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.zoom.html#scipy.ndimage.zoom

from scipy.ndimage.interpolation import zoom
a = np.ones((1024, 1024))
small_a = zoom(a, 0.5)

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы