将图像分成块

时间:2016-11-09 23:24:12

标签: python numpy image-processing scipy

我正在使用代码列出具有重要信息的图像像素供以后使用 - 红色,绿色,蓝色,X,Y。

import numpy as np
from scipy.misc import imread

im = imread("image.jpg") 

indices = np.dstack(np.indices((im.shape[:2])))
data = np.concatenate((im, indices), axis=-1)
print data

印刷数据:

        R   G   B    X   Y
    [[[237 233 234   0   0]
      [235 231 232   0   1]
      [243 234 237   0   2]
      ..., 
      [236 232 233   0 507]
      [233 229 230   0 508]
      [236 232 233   0 509]]

但它打印的整个图像数据不是以块为单位。如何在2x2块中获取此数据,块中的4个像素信息?像这样:

    R   G   B    X   Y
[[[237 233 234   0   0]
  [235 231 232   0   1]
  [243 234 237   0   2]
  [243 234 257   0   3]]

1 个答案:

答案 0 :(得分:1)

将以下内容添加到您的代码中:

a = data[::2, ::2, :]
b = data[::2, 1::2, :]
c = data[1::2, ::2, :]
d = data[1::2, 1::2, :]
e = np.stack([a, b, c, d], axis=3)
print(e)

使用我的图片:

     R    G    B     X    Y
[[[  47  124  206    0    0]
  [  52  124  206    0    1]
  [  53  126  205    0    2]
  ..., 
  [  74  129  211    0 1021]
  [  73  130  211    0 1022]
  [  69  132  211    0 1023]]

 [[  47  124  206    1    0]
  [  51  123  205    1    1]
  [  53  126  205    1    2]
  ..., 
  [  75  130  212    1 1021]
  [  73  130  211    1 1022]
  [  69  130  210    1 1023]] ...

转向:

[[[[  47   52   47   51]   R
   [ 124  124  124  123]   G
   [ 206  206  206  205]   B
   [   0    0    1    1]   X
   [   0    1    0    1]]  Y

  [[  53   58   53   58]   R
   [ 126  125  126  125]   G
   [ 205  204  205  204]   B
   [   0    0    1    1]   X
   [   2    3    2    3]]  Y

  [[  64   71   64   70]   R
   [ 127  126  127  127]   G
   [ 206  208  206  208]   B
   [   0    0    1    1]   X
   [   4    5    4    5]]  Y

  ...,