首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Numpy RGB数组为大图像创建Vips图像

从Numpy RGB数组为大图像创建Vips图像
EN

Stack Overflow用户
提问于 2018-11-28 05:10:06
回答 1查看 1.6K关注 0票数 0

我试着用PIL/Pillow输出一个大的,生成的图像,但是当图像大小变大时,它就会中断。

因此,基于我读到的内容,我正在尝试使用贵宾。

我生成的数据是RGB值的numpy数组。我想把它转换成重要人物的图像,这样我就可以保存它了。但是,我无法想出如何将像素数据输入到贵宾中。

代码语言:javascript
复制
import numpy
import gi
gi.require_version('Vips', '8.0')
from gi.repository import Vips

WIDTH=32768
HEIGHT=32768
UCHAR=Vips.BandFormat.UCHAR

# Create an RGB black image
black_space = numpy.zeros( ( WIDTH, HEIGHT, 3 ), dtype=numpy.uint8 )

# this doesn't work
vips_image = Vips.Image.new_from_memory( black_space, WIDTH, HEIGHT, bands=3, format=UCHAR )
vips_image.write_to_file( "space_32k.tiff" )

当然,当创建Vips映像时,它会出现错误,从而失败:

代码语言:javascript
复制
Traceback (most recent call last):
  File "./bad_vips.py", line 14, in <module>
    vips_image = Vips.Image.new_from_memory( black_space, WIDTH, HEIGHT, bands=3, format=UCHAR )
TypeError: Item 0: expected int argument

是否有一种方法来转换numpy数组,使其与Vips一起工作?

我也尝试过传递black_space.data,但之后我得到了:

代码语言:javascript
复制
NotImplementedError: Item 0: multi-dimensional sub-views are not implemented
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-28 05:26:21

您正在使用旧的libvips Python接口--现在有一个更新的接口,它要好得多:

https://github.com/libvips/pyvips

这里的医生:

https://libvips.github.io/pyvips/

有关于链接libvips和numpy的一节。你的例子是:

代码语言:javascript
复制
import numpy
import pyvips

WIDTH = 100
HEIGHT = 100

# Create an RGB black image
black_space = numpy.zeros((WIDTH, HEIGHT, 3), dtype=numpy.uint8)

# reshape into a huge linear array
linear = black_space.reshape(WIDTH * HEIGHT * 3)

vips_image = pyvips.Image.new_from_memory(linear.data, \
        WIDTH, HEIGHT, bands=3, format="uchar")

vips_image.write_to_file("huge.tif")

reshape是免费的(我认为),所以它应该是有效的。回购程序中也有一个示例程序:

https://github.com/libvips/pyvips/blob/master/examples/pil-numpy-pyvips.py

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53512535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档