0

我使用的是iPython笔记本,我有一个512x512图像,我想用'最接近'的颜色插值'变换'为'块状'图像块,类似于Photoshop中的“马赛克”滤镜,以进一步处理一批图片。使用matplotlib和/或numpy创建块状图像的图像调色板的尺寸缩小

enter image description here

在Photoshop中,加载图像,并可以将过滤器设置为“马赛克”,并设置在像素中的“块大小”。

Here有一个关于如何使用numpy来做的部分解释,但是因为我不是一个numpy专家,所以我发现了一个'快捷方式',这对我来说是一种使用PIL的工作。我不知道如何适当调整它以避免一些不必要的步骤。

img = Image.open(filename) 
h = img.size[0] 
v = img.size[1] 

blocksize = 100 

rsize = img.resize((h/blocksize,v/blocksize)) # resize the image 
rsizeArr = np.asarray(rsize) 
lum_img = rsizeArr[:,:,0] 

#plt.axes.get_xaxis().set_visible(False) 
#plt.axes.get_yaxis().set_visible(False) 

imgplot = plt.imshow(rsizeArr) 
#imgplot = plt.imsave('test.jpg', rsizeArr) 
imgplot.set_interpolation('nearest') 

imgplot.axes.get_xaxis().set_visible(False) 
imgplot.axes.get_yaxis().set_visible(False) 

plt.savefig('testplot1.png', bbox_inches = 'tight') 

由于我使用IPython的笔记本,这只要在执行生产线生产的笔记本内嵌输出。 (我不想显示此特定步骤的内联输出,因为我将在笔记本中处理多张图片)。

enter image description here

的“tesplot1.png”文件的大小1KB,但是,出于某种原因,它的尺寸获取的减少为264x264像素。因为我想在512×512的原大小的图像,我做到以下几点:

img2 = Image.open('testplot1.png') 
rsize = img2.resize((512,512)) # resize the image 
rsize.save('testplot2.jpg') 

这将生成512×512像素的右侧图像。

我的问题是: 1)有没有办法产生的图像不必通过imgplot = plt.imshow(rsizeArr)内联显示它?我需要在我的笔记本上内联pylab,所以我不知道它是否可以“暂时”禁用。 2)有没有办法通过将'tesplot1.png'保存为合适的大小来忽略大小调整步骤(img2)? 3)使用解释here完成此操作所需的矢量操作是什么?

回答

1
  1. 不要使用pylab内联。
  2. 如果你仍然想使用pylab内联不要。它已被弃用。
  3. 使用%matplotlib内嵌
  4. 了解matplotlib OO的方式,您不会隐式地在当前活动轴上执行任何操作。

您绘图问题将消失。

对于你想要处理你的图像块的东西作为一个numpy阵列块:How can I efficiently process a numpy array in blocks similar to Matlab's blkproc (blockproc) function例如。

+0

谢谢你马特。我找到了另一个解干杯 –