当前位置: 首页 > 后端技术 > Python

PIL、cv2、bytes三种图片格式相互转换

时间:2023-03-26 11:31:08 Python

1.PIL与cv2相互转换importcv2fromPILimportImageimportnumpyasnp#PILtocv2img=Image.open("test.jpg")img=cv2.cvtColor(np.asarray(img),cv2.COLOR_RGB2BGR)print(type(img))#cv2toPILimg=cv2.imread("test.jpg")img=Image.fromarray(cv2.cvtColor(img,cv2.COLOR_BGR2RGB))print(type(img))2.PIL和bytes相互转换'''bytestoPIL'''#Type1:convertlocalbytesimagetoPILwithopen('test.jpg','rb')asf:content=f.read()local_img=Image.open(BytesIO(content))print(type(local_img))#第二种:将网络上的字节图片转换为PILurl='https://z3.ax1x.com/2021/07/13/WAuYJU.jpg'内容=请求。get(url,stream=True).contentnet_img=Image.open(BytesIO(content))#BytesIO实现内存读写Bytesprint(type(net_img))'''PILtobytes'''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的交互将importnumpyasnpimportcv2#bytes转换为numpyimg_buffer_numpy=np.frombuffer(img_bytes,dtype=np.uint8)#将图像字节码字节转换成一维numpy数组放入缓存img_numpy=cv2.imdecode(img_buffer_numpy,1)#从指定内存缓存中读取一维numpy数据,并放入Data转换(解码)成图像矩阵格式#numpytobytes_,img_encode=cv2.imencode('.jpg',img_numpy)img_bytes=img_encode.tobytes()