Python 将JPEG从URL加载到skimage,无需临时文件

Python 将JPEG从URL加载到skimage,无需临时文件,python,scikit-learn,urllib2,scikit-image,imread,Python,Scikit Learn,Urllib2,Scikit Image,Imread,是否可以从URL加载skimage(numpy矩阵)格式的图像而不创建临时文件 skimage本身使用临时文件: 有没有办法直接将urlopen(url.read()传递给imread.imread()(或任何其他图像读取库)?来自: 图像文件名,例如test.jpg或URL 因此,您可以直接传递您的URL: io.imread(url) 请注意,它仍然会创建一个临时文件来处理图像 编辑: 库imread还有一个方法imread\u from\u blob,它接受字符串作为输入。因此,您可以

是否可以从URL加载skimage(numpy矩阵)格式的图像而不创建临时文件

skimage本身使用临时文件:

有没有办法直接将
urlopen(url.read()
传递给
imread.imread()
(或任何其他图像读取库)?

来自:

图像文件名,例如test.jpg或URL

因此,您可以直接传递您的URL:

io.imread(url)
请注意,它仍然会创建一个临时文件来处理图像


编辑:

imread
还有一个方法
imread\u from\u blob
,它接受字符串作为输入。因此,您可以将数据直接传递到此函数

from imread import imread_from_blob
img_data = imread_from_blob(data, 'jpg')

>>> img_data
array([[[ 23, 123, 149],
[ 22, 120, 147],
[ 22, 118, 143],
...,

第二个参数是通常与此blob关联的扩展。如果没有给出,则使用
detect\u格式
自动检测。

有点棘手,但可以工作(在Python 3.4上)。 似乎skimage本身无法解析缓冲区中的图像。但无论如何,它在任何情况下都会含蓄地使用枕头

您需要用下载的数据填充BytesIO缓冲区,然后将其输入PIL.Image,然后从中创建skimage.io.Image

from urllib.request import urlopen
from io import BytesIO
from PIL import Image
from skimage import io

url = 'http://www.musicnowsg.com/wp-content/uploads/2013/12/grumpy-jazz-cat.jpg'
response = urlopen(url)
buf = BytesIO(response.read())
im = Image.open(buf)
a = io.Image(im)

io.imshow(a)
io.show()

这正是我想要避免的,这就是为什么我在github上附加了一个链接,其中显示了通过创建临时文件在skimage中处理URL的代码。但你为什么要避免这个问题?@user1263702:我编辑了我的答案,并添加了一个应该适合你需要的解决方案。@Cybril我对工作机器有一些限制,例如,即使在/tmp/中,我也没有创建文件的权限。顺便说一句,imread\u from\u blob正是我要找的东西。然后你仍然需要通过机器发送它来获得一个numpy数组。PIL插件可以读取类似对象的文件。嘿@Mahmoud,欢迎使用SO!通常情况下,我们希望看到一些问题的解释以及代码。此外,我刚刚试过,得到了
HttpError:Forbidden
。嘿@AleksanderLidtke。谢谢!我认为代码非常简单,不言自明,请尝试提供您自己的图像URL。
import matplotlib.pyplot  as plt
from skimage import io

image=io.imread ('https://YOUR-IMAGE-URL')

plt.imshow(image)
plt.show()