首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Rawpy图像处理库从URL读取图像?

如何使用Rawpy图像处理库从URL读取图像?
EN

Stack Overflow用户
提问于 2022-01-27 09:03:33
回答 1查看 730关注 0票数 0

如何使用rawpy库从url读取图像?

我试过了

代码语言:javascript
运行
复制
filepath = www.google.com/image.jpeg

im = rawpy.imread(filepath)

但不起作用。

我更深入地研究了rawpy的代码,它说它采用“路径或文件”。

我也尝试过其他方法,比如使用tempfile (内存中的一个对象,BytesIO ),但这些方法都不起作用。

请帮我一把。

编辑一:

关于urllib.request库,我得到了以下错误:

i)

代码语言:javascript
运行
复制
import rawpy
import io
import urllib

filepath = 'https://filesamples.com/samples/image/jpeg/sample_640%C3%97426.jpeg'

data = urllib.request.urlopen(filepath).read()
stream = io.BytesIO(data)
im = rawpy.imread(stream)

产生的误差

代码语言:javascript
运行
复制
LibRawFileUnsupportedError                Traceback (most recent call last)
<ipython-input-88-7965dccc6908> in <module>
     35 stream = io.BytesIO(data)
---> 36 im = rawpy.imread(stream)
     37 
     38 """

~/anaconda3/envs/tensorflow2_p36/lib/python3.6/site-packages/rawpy/__init__.py in imread(pathOrFile)
     16     d = RawPy()
     17     if hasattr(pathOrFile, 'read'):
---> 18         d.open_buffer(pathOrFile)
     19     else:
     20         d.open_file(pathOrFile)

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.open_buffer()

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.handle_error()

LibRawFileUnsupportedError: b'Unsupported file format or not RAW file'

ii)

代码语言:javascript
运行
复制
import rawpy
import io
import urllib
import tempfile
import shutil

filepath = 'https://filesamples.com/samples/image/jpeg/sample_640%C3%97426.jpeg'

with urllib.request.urlopen(filepath) as response:
    with tempfile.NamedTemporaryFile(delete = False) as tmp_file:
        shutil.copyfileobj(response,tmp_file)
        im = rawpy.imread(tmp_file)

产生的误差

代码语言:javascript
运行
复制
LibRawIOError                             Traceback (most recent call last)
<ipython-input-89-ae0405bcc04a> in <module>
     42         shutil.copyfileobj(response,tmp_file)
---> 43         im = rawpy.imread(tmp_file)
     44 

~/anaconda3/envs/tensorflow2_p36/lib/python3.6/site-packages/rawpy/__init__.py in imread(pathOrFile)
     16     d = RawPy()
     17     if hasattr(pathOrFile, 'read'):
---> 18         d.open_buffer(pathOrFile)
     19     else:
     20         d.open_file(pathOrFile)

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.open_buffer()

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.handle_error()

LibRawIOError: b'Input/output error'

(三)

代码语言:javascript
运行
复制
import rawpy
import io
import urllib
import tempfile
import shutil

filepath = 'https://filesamples.com/samples/image/jpeg/sample_640%C3%97426.jpeg'

with urllib.request.urlopen(filepath) as response:
    data = response.read()
    im = rawpy.imread(data)

产生的误差

代码语言:javascript
运行
复制
AttributeError                            Traceback (most recent call last)
<ipython-input-90-f10bfdef4333> in <module>
     55     data = response.read() 
---> 56     im = rawpy.imread(data)
     57 

~/anaconda3/envs/tensorflow2_p36/lib/python3.6/site-packages/rawpy/__init__.py in imread(pathOrFile)
     18         d.open_buffer(pathOrFile)
     19     else:
---> 20         d.open_file(pathOrFile)
     21     return d

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.open_file()

AttributeError: 'bytes' object has no attribute 'encode'

编辑二:我尝试过的其他没有使用urllib库的东西是

( i)在内存文件中

代码语言:javascript
运行
复制
import io
import rawpy 

filepath = 'https://filesamples.com/samples/image/jpeg/sample_640%C3%97426.jpeg'

response = requests.get(filepath)
in_mem_file = io.BytesIO(response.content)
im = rawpy.imread(in_mem_file)

产生的误差

代码语言:javascript
运行
复制
LibRawFileUnsupportedError                Traceback (most recent call last)
<ipython-input-91-1ef650bdc042> in <module>
     48 response = requests.get(filepath)
     49 in_mem_file = io.BytesIO(response.content)
---> 50 im = rawpy.imread(in_mem_file)
     51 

~/anaconda3/envs/tensorflow2_p36/lib/python3.6/site-packages/rawpy/__init__.py in imread(pathOrFile)
     16     d = RawPy()
     17     if hasattr(pathOrFile, 'read'):
---> 18         d.open_buffer(pathOrFile)
     19     else:
     20         d.open_file(pathOrFile)

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.open_buffer()

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.handle_error()

LibRawFileUnsupportedError: b'Unsupported file format or not RAW file'

( ii)智能开启

代码语言:javascript
运行
复制
from smart_open import open
import rawpy 

filepath = 'https://filesamples.com/samples/image/jpeg/sample_640%C3%97426.jpeg'

def get_file(filepath):
    with open(filepath, 'rb') as s3_source:
        return s3_source
        
s3_source = get_file(filepath)
im = rawpy.imread(s3_source)

产生的误差

代码语言:javascript
运行
复制
LibRawIOError                             Traceback (most recent call last)
<ipython-input-92-03b94616ed66> in <module>
     55         return s3_source
     56 s3_source = get_file(filepath)
---> 57 im = rawpy.imread(s3_source)

~/anaconda3/envs/tensorflow2_p36/lib/python3.6/site-packages/rawpy/__init__.py in imread(pathOrFile)
     16     d = RawPy()
     17     if hasattr(pathOrFile, 'read'):
---> 18         d.open_buffer(pathOrFile)
     19     else:
     20         d.open_file(pathOrFile)

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.open_buffer()

rawpy/_rawpy.pyx in rawpy._rawpy.RawPy.handle_error()

LibRawIOError: b'Input/output error'

编辑三(解决方案):

好的,我通过使用原始图像格式数据(.dng)来解决这个问题。

这是我的密码

代码语言:javascript
运行
复制
import rawpy
import BytesIO
import imageio

filepath = 'www.google.com/sample_file.dng'
response = requests.get(filepath)
raw = rawpy.imread(BytesIO(response.content))
rgb = raw.postprocess()
imageio.imsave('test_rawpy.jpeg', rgb)
EN

Stack Overflow用户

回答已采纳

发布于 2022-01-27 12:20:43

JPEG不是原始图像格式。您需要发送一些原始数据作为输入。

所以,

  1. 如果您只想处理一些JPEG,请尝试枕头
  2. 如果要处理原始图像,请更改输入数据。
票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70875810

复制
相关文章

相似问题

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