亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

python圖片和二進(jìn)制轉(zhuǎn)換的三種實(shí)現(xiàn)方式

 更新時(shí)間:2024年09月14日 11:26:25   作者:臉不大的CVer  
本文介紹了將PIL格式、數(shù)組和圖片轉(zhuǎn)換為二進(jìn)制的不同方法,包括使用PIL庫、OpenCV和直接讀取二進(jìn)制,此外,還提到了數(shù)據(jù)傳輸中base64格式的應(yīng)用,這些信息對(duì)需要進(jìn)行圖片數(shù)據(jù)處理和轉(zhuǎn)換的開發(fā)者非常有用

PIL格式轉(zhuǎn)二進(jìn)制

先讀取為PIL格式,再轉(zhuǎn)為二進(jìn)制

import io
import base64
from PIL import Image

def image2byte(image):
    '''
    圖片轉(zhuǎn)byte
    image: 必須是PIL格式
    image_bytes: 二進(jìn)制
    '''
    # 創(chuàng)建一個(gè)字節(jié)流管道
    img_bytes = io.BytesIO()
    # 將圖片數(shù)據(jù)存入字節(jié)流管道, format可以按照具體文件的格式填寫
    image.save(img_bytes, format="JPEG")
    # 從字節(jié)流管道中獲取二進(jìn)制
    image_bytes = img_bytes.getvalue()
    return image_bytes

def byte2image(byte_data):
    '''
    byte轉(zhuǎn)為圖片
    byte_data: 二進(jìn)制
    '''
    image = Image.open(io.BytesIO(byte_data))
    return image

調(diào)用代碼

image_path = "img/3.jpg"
image = Image.open(image_path)
byte_data = image2byte(image)
image2 = byte2image(byte_data)

數(shù)組轉(zhuǎn)二進(jìn)制

先用opencv讀取為數(shù)組格式,再轉(zhuǎn)為二進(jìn)制

def numpy2byte(image):
    '''
    數(shù)組轉(zhuǎn)二進(jìn)制
    image : numpy矩陣/cv格式圖片
    byte_data:二進(jìn)制數(shù)據(jù)
    '''
    #對(duì)數(shù)組的圖片格式進(jìn)行編碼
    success,encoded_image = cv2.imencode(".jpg",image)
    #將數(shù)組轉(zhuǎn)為bytes
    byte_data = encoded_image.tobytes()
    return byte_data
def byte2numpy(byte_data):
    '''
    byte轉(zhuǎn)numpy矩陣/cv格式
    byte_data:二進(jìn)制數(shù)據(jù)
    image : numpy矩陣/cv格式圖片
    '''
    image = np.asarray(bytearray(byte_data), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    return image

調(diào)用代碼

image_path = "img/3.jpg"
image = cv2.imread(image_path)
byte_data = numpy2byte(image)
image2 = byte2numpy(byte_data)

圖片轉(zhuǎn)二進(jìn)制

直接讀取圖片為二進(jìn)制

import cv2
import numpy as np

def read2byte(path):
    '''
    圖片轉(zhuǎn)二進(jìn)制
    path:圖片路徑
    byte_data:二進(jìn)制數(shù)據(jù)
    '''
    with open(path,"rb") as f:
        byte_data = f.read()
    return byte_data

def byte2numpy(byte_data):
    '''
    byte轉(zhuǎn)numpy矩陣/cv格式
    byte_data:二進(jìn)制數(shù)據(jù)
    image : numpy矩陣/cv格式圖片
    '''
    image = np.asarray(bytearray(byte_data), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    return image

調(diào)用代碼

image_path = "img/3.jpg"

byte_data = read2byte(image_path)
image = byte2numpy(byte_data)

延伸

有時(shí)候數(shù)據(jù)傳輸規(guī)定轉(zhuǎn)換為base64格式,可以參考我的另一篇文章 圖片和base64轉(zhuǎn)換的三種方式

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論