• python cv2展示网络图片、图片编解码、及与base64转换


    从网络读取图像数据并展示

    • 需要使用cv2.imdecode()函数,从指定的内存缓存中读取数据,并把数据转换(解码)成图像格式;主要用于从网络传输数据中恢复出图像。
    # -*- coding: utf-8 -*-
    import numpy as np
    from urllib import request
    import cv2
     
    url = 'https://www.baidu.com/img/superlogo_c4d7df0a003d3db9b65e9ef0fe6da1ec.png?where=super'
    resp = request.urlopen(url)
    image = np.asarray(bytearray(resp.read()), dtype="uint8")
    image = cv2.imdecode(image, cv2.IMREAD_COLOR)
    cv2.imshow('url_image_show', image)
    if cv2.waitKey(10000) & 0xFF == ord('q'):
        cv2.destroyAllWindows()   
    

    展示图片:
    在这里插入图片描述

    图片编码保存到本地,读取本地文件解码恢复成图片格式并展示

    • 需要使用cv2.imencode()函数,将图片格式转换(编码)成流数据,赋值到内存缓存;主要用于图像数据格式的压缩,方便网络传输。
    # -*- coding: utf-8 -*-
    import numpy as np
    import cv2
     
    img = cv2.imread('cat.jpg')
    
    '''
    cv2.imencode()函数是将图片格式转换(编码)成流数据,赋值到内存缓存中;主要用于图像数据格式的压缩,方便网络传输
    '.jpg'表示把当前图片img按照jpg格式编码,按照不同格式编码的结果不一样
    '''
    img_encode = cv2.imencode('.jpg', img)[1]
    # imgg = cv2.imencode('.png', img)
     
    data_encode = np.array(img_encode)
    str_encode = data_encode.tostring()
     
    # 缓存数据保存到本地,以txt格式保存
    with open('img_encode.txt', 'wb') as f:
        f.write(str_encode)
        f.flush
     
    with open('img_encode.txt', 'rb') as f:
        str_encode = f.read()
     
    nparr = np.fromstring(str_encode, np.uint8)
    img_decode = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
    
    '''
    # 或
    nparr = np.asarray(bytearray(str_encode), dtype="uint8")
    img_decode = cv2.imdecode(image, cv2.IMREAD_COLOR)
    '''
    cv2.imshow("img_decode", img_decode)
    if cv2.waitKey(10000) & 0xFF == ord('q'):
            cv2.destroyAllWindows()   
    

    展示图片:
    在这里插入图片描述

    将np图片(imread后的图片)转码为base64格式

    def image_to_base64(image_np):
     
        image = cv2.imencode('.jpg',image_np)[1]
        image_code = str(base64.b64encode(image))[2:-1]
     
        return image_code
    

    将base64编码解析成opencv可用图片

    def base64_to_image(base64_code):
     
        # base64解码
        img_data = base64.b64decode(base64_code)
        # 转换为np数组
        img_array = np.fromstring(img_data, np.uint8)
        # 转换成opencv可用格式
        img = cv2.imdecode(img_array, cv2.COLOR_RGB2BGR)
     
        return img
    
  • 相关阅读:
    ubuntu12.04 安装配置jdk1.7
    Ubuntu下解决bash 没有那个文件或目录的方法
    Mongodb集群搭建的三种方式
    AngularJS 中文资料+工具+库+Demo 大搜集
    Android 反编译apk 详解
    Node.js 开发模式(设计模式)
    Comet:基于 HTTP 长连接的“服务器推”技术
    基于NodeJS的全栈式开发
    node.js应用Redis数据库
    Hibernate(二):MySQL server version for the right syntax to use near 'type=InnoDB' at line x
  • 原文地址:https://www.cnblogs.com/gmhappy/p/11863946.html
Copyright © 2020-2023  润新知