如何减少图像处理中的图像大小(scipy/numpy/python)

Hol*_*ger 11 python numpy image image-processing scipy

你好我有一个图像(1024 x 1024),我在numpy中使用"fromfile"命令将该图像的每个像素放入矩阵中.

如何通过修改矩阵来减小图像的大小(例如512 x 512)?

a = numpy.fromfile(( - path - ,'uint8').reshape((1024,1024))
Run Code Online (Sandbox Code Playgroud)

我不知道如何修改矩阵a来减小图像的大小.所以,如果有人有任何想法,请分享您的知识,我将不胜感激.谢谢


编辑:

当我查看结果时,我发现读者已经阅读了图像并将其放入"矩阵"中.所以我将"数组"改为矩阵.

何塞告诉我,我只能连列甚至行,并把它放到一个新的矩阵中.这将把图像缩小到一半.我需要使用scipy/numpy中的哪个命令来执行此操作?

谢谢

Mik*_*nen 20

如果要调整大小到特定分辨率,请使用scipy.misc.imresize:

import scipy.misc

i_width = 640
i_height = 480

scipy.misc.imresize(original_image, (i_height, i_width))
Run Code Online (Sandbox Code Playgroud)

  • 在scipy 1.0.0中已弃用,应使用skimage.transform.resize (4认同)
  • 我认为这是正确的答案。直截了当,直接使用numpy数组格式的图像。谢谢! (2认同)

til*_*ten 16

使用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)
Run Code Online (Sandbox Code Playgroud)


小智 3

我认为最简单的方法是只获取图像的一些列和一些行。制作数组的样本。举个例子,只有那些偶数行和偶数列,将其放入一个新数组中,您将得到一半大小的新图像。

  • @LearnMore - 它就像`y = x[::2, ::2]`一样简单(或者`::3`,如果你想要每第三行,等等)。请注意,这会导致锯齿问题,因为它本质上只是“最近邻居”插值(尽管它非常非常快)。@tillsten 的答案一般来说是一个更好的方法,但会产生更多的开销。这完全取决于您需要做什么。 (2认同)