2016-11-09 170 views
1

我想将RGB图像分成块8x8 = 64(块中的像素)并从块中提取像素颜色。我已经分割图像成块的8x8:如何将图像分成块并找到像素颜色

w, h = img.size # width, height of image 
bw, bh = 8, 8 # block size 
img = Image.open('anyimage.JPG') 

img = np.array(img) 

sz = img.itemsize 
shape = (h-bh+1, w-bw+1, bh, bw 
strides = (w*sz, sz, w*sz, sz) 
blocks = np.lib.stride_tricks.as_strided(img, shape=shape, strides=strides) 

print blocks[1,1] 

我在块得到这个值:

[[169 185 147 170 186 149 170 187] 
[139 161 122 140 162 122 140 162] 
[131 135 113 131 135 118 135 142] 
[170 186 147 170 186 147 170 188] 
[142 164 124 142 164 122 140 162] 
[136 138 113 137 141 114 138 142] 
[174 191 148 174 191 147 173 190] 
[142 164 126 144 166 125 143 165]] 

如何从块提取所有像素的颜色?

回答

0

您可以尝试

pixels = img.load() 

all_pixels = [] 
for x in range(block_width): #put your block width size 
    for y in range(block_height): #your block heigh size 
     cpixel = pixels[x, y] #reading elements from pixel on location (x,y) 
     all_pixels.append(cpixel) 

这追加的每个像素的all_pixel,在一个元组的形式。例如

(111, 222, 255) #R-G-B 
+0

感谢您的回复。我试过img.getdata(),但它会返回整个图像像素的颜色,我需要特定的块像素颜色。 – Streem

+0

我很抱歉,但我很困惑你的目标。你能提供一些预期的结果吗? – dpw

+0

谢谢,dpw求助。我想在一个块中将图像划分为8个像素×8像素= 64像素的块,我已经使用之前发布的代码完成了它。我想从每个块中列出RGB(112,231,222)中的像素颜色,并将其转换为亮度以获得像素颜色强度,我这样做 - (.299 *红)+(.587 *绿)+( .114 *蓝),当我从每个块的颜色强度,我想找到最亮的块。但是在我将图像分成块的那一刻,我只能获得块像素坐标,如何获得像素颜色?我希望我的问题对我的英语更加清楚。 – Streem

相关问题