碎点篇——PIL、base64与cv2 图片格式之间的转换

返回主目录

PIL、base64与cv2 图片格式之间的转换

在做图像算法的过程中,经常遇上,要对图像格式进行转换,来处理图像。下面代码示例为 PIL、base64 与 cv2 图像格式之间的转换:

#!/usr/bin/env python
# _*_ coding:utf-8 _*_
# ============================================
# @Time     : 2019/11/04 10:15
# @Author   : WanDaoYi
# @FileName : image_str_util.py
# ============================================


from PIL import Image
import base64
from io import BytesIO
import cv2
import numpy as np


# image 转 base64
def img_base64(image):
    base64_str = base64.b64encode(image)
    return base64_str
    pass


# base64 转 cv2
def base64_cv2(base64_str):
    image_str = base64.b64decode(base64_str)
    str_array = np.fromstring(image_str, np.uint8)
    cv2_image = cv2.imdecode(str_array, cv2.IMREAD_COLOR)
    return cv2_image
    pass


# cv2 转 base64
def cv2_base64(image):
    image_str = cv2.imencode(".jpg", image)[1].tostring()
    base64_str = base64.b64encode(image_str)
    return base64_str
    pass


# base64 转 pil
def base64_pil(base64_str):
    image_str = base64.b64decode(base64_str)
    image_byte = BytesIO(image_str)
    pil_image = Image.open(image_byte)
    return pil_image
    pass


# pil 转 base64
def pil_base64(image):
    img_buffer = BytesIO()
    image.save(img_buffer, format="JPEG")
    byte_data = img_buffer.getvalue()
    base64_str = base64.b64encode(byte_data)
    return base64_str
    pass


# cv2 转 pil
def cv2_pil(cv2_image):
    pil_image = Image.fromarray(cv2.cvtColor(cv2_image, cv2.COLOR_BGR2RGB))
    return pil_image
    pass


# pil 转 cv2
def pil_cv2(pil_image):
    cv2_image = cv2.cvtColor(np.asarray(pil_image), cv2.COLOR_RGB2BGR)
    return cv2_image
    pass


if __name__ == "__main__":
    image_path = "zhaoyihuan.jpg"
    image = cv2.imread(image_path)
    h, w = image.shape[: 2]
    cv2.namedWindow("image", cv2.WINDOW_NORMAL)
    cv2.resizeWindow("image", w // 2, h // 2)
    cv2.imshow("image", image)

    base64_str = cv2_base64(image)
    # print("base64_str: {}".format(base64_str))

    new_cv2_image = base64_cv2(base64_str)
    # print("new_cv2_image: {}".format(new_cv2_image))
    h_new, w_new = new_cv2_image.shape[: 2]
    cv2.namedWindow("new_cv2_image", cv2.WINDOW_NORMAL)
    cv2.resizeWindow("new_cv2_image", w_new // 2, h_new // 2)
    cv2.imshow("new_cv2_image", new_cv2_image)

    pil_image = base64_pil(base64_str)
    # pil_image.show()

    base64_str = pil_base64(pil_image)
    # print("base64_str: {}".format(base64_str))

    cv2_pil_image = cv2_pil(image)
    # cv2_pil_image.show()

    pil_cv2_image = pil_cv2(pil_image)
    h_pil_cv2, w_pil_cv2 = pil_cv2_image.shape[: 2]
    cv2.namedWindow("pil_cv2_image", cv2.WINDOW_NORMAL)
    cv2.resizeWindow("pil_cv2_image", w_pil_cv2 // 2, h_pil_cv2 // 2)
    cv2.imshow("pil_cv2_image", pil_cv2_image)

    cv2.waitKey(0)

    pass

             

                 

返回主目录

发布了42 篇原创文章 · 获赞 15 · 访问量 2782

猜你喜欢

转载自blog.csdn.net/qq_38299170/article/details/103942226
今日推荐