ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python 图片bytes PIL CV2 的相互转换

2022-07-06 11:03:51  阅读:208  来源: 互联网

标签:PIL img Python bytes CV2 jpg cv2 numpy


1. PIL 与 cv2 相互转化

import cv2
from PIL import Image
import numpy as np

# PIL 转 cv2
img= Image.open("test.jpg")
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
print(type(img))



# cv2 转 PIL
img = cv2.imread("test.jpg")
img= Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))
print(type(img))

 

2. PIL 与 bytes 相互转化

'''
    bytes 转 PIL 
'''
# 第一类:转换 本地的bytes图片 为 PIL
with open('test.jpg', 'rb') as f:
    content = f.read()  
local_img = Image.open(BytesIO(content))   
print(type(local_img))  



# 第二类:转换 网络上的bytes图片 为 PIL
url = 'https://z3.ax1x.com/2021/07/13/WAuYJU.jpg'
content = requests.get(url, stream=True).content
net_img = Image.open(BytesIO(content))   # BytesIO实现了在内存中读写Bytes
print(type(net_img))    




'''
    PIL 转 bytes
'''
img_bytes  = BytesIO()
img = Image.open('test.jpg', mode='r')
img.save(img_bytes, format='JPEG')
img_bytes = img_bytes.getvalue()
print(type(img_bytes))  

 

3. cv2 与bytes 相互转化

import numpy as np
import cv2


# bytes 转 numpy
img_buffer_numpy = np.frombuffer(img_bytes, dtype=np.uint8)  # 将 图片字节码bytes  转换成一维的numpy数组 到缓存中
img_numpy = cv2.imdecode(img_buffer_numpy, 1)   # 从指定的内存缓存中读取一维numpy数据,并把数据转换(解码)成图像矩阵格式



# numpy 转 bytes
 _, img_encode = cv2.imencode('.jpg', img_numpy)
img_bytes = img_encode.tobytes()

 

标签:PIL,img,Python,bytes,CV2,jpg,cv2,numpy
来源: https://www.cnblogs.com/zhaoyingjie/p/16449913.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有