从内存中如何解码JPG图像?

9

我可以通过PIL,Python OpenCV等工具以及一些内置函数从磁盘中读取jpg图像,例如(在OpenCV的情况下)arr=cv2.imread(filename),将其转换为numpy数组。

但是,如何直接从内存中解码二进制格式的jpg图像呢?

应用场景:我想以二进制格式将jpg图像放入数据库,并从数据库中读取到内存中并解码成numpy数组。

这个可能吗?

3个回答

14

假设您将图像数据存储在数据库中作为字符串,您需要首先构造一个numpy数组,然后可以使用cv2.imdecode将其转换为图像。例如:

img = cv2.imdecode(np.fromstring(img_data, dtype=np.uint8), cv2.IMREAD_UNCHANGED)

2

对于Python3,请使用以下方式:

from scipy import misc
import io

f = open('file.png', 'rb')
fs = f.read()
likefile = io.BytesIO(fs)
face1 = misc.imread(likefile)

Python2中有StringIO模块。


2
misc是什么意思? :) - jtlz2
1
好的,jtlz2。我使用了scipy.misc。我已经在Anaconda3中安装了它。现在它将被弃用,但文档建议使用imageio.imread。https://docs.scipy.org/doc/scipy/reference/generated/scipy.misc.imread.html - feech

-1

从Url获取图像并转换为Jpg格式

    import requests
    from io import BytesIO

    response = requests.get("https://optse.ztat.net/teaser/ES/CW15_ES_bermuda_men.jpg")
    my_img_In_byts = BytesIO(response.content).read()


    path="C:/Users/XX/Desktop/TryingPython/downloadedPic.jpg"

    my_fprinter = open(path, mode='wb')
    print( my_fprinter .write(my_img_In_byts))
    my_fprinter.close()
    print("Done")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接