【发布时间】:2015-09-11 10:15:31
【问题描述】:
我正在使用 iPython 笔记本,我有一个 512x512 图像,我想使用块中的“最近”插值将其“转换”为“块状”图像,类似于 Photoshop 中的“马赛克”过滤器,对于某些人来说进一步处理一批图片。
在 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 笔记本,因此一旦执行该行,就会在笔记本中生成内联输出。 (我不想显示此特定步骤的内联输出,因为我将在笔记本中处理几张图片)。
“tesplot1.png”文件大小为 1KB,但由于某种原因,其尺寸减小到 264x264 像素。由于我希望图像的原始尺寸为 512x512,因此我执行以下操作:
img2 = Image.open('testplot1.png')
rsize = img2.resize((512,512)) # resize the image
rsize.save('testplot2.jpg')
这会生成 512x512 像素的右图。
我的问题是: 1) 有没有办法生成图像而无需通过 imgplot = plt.imshow(rsizeArr) 内联显示它?我的笔记本需要 pylab inline,所以我不知道它是否可以“暂时”禁用。 2)有没有办法通过以正确的大小保存'tesplot1.png'来省略调整大小的步骤(img2)? 3) 使用here 的解释来完成此操作所需的向量操作是什么?
【问题讨论】:
标签: python numpy matplotlib python-imaging-library ipython-notebook