zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    2、Windows 系统下安装 IntelliJ IDEA
    1、IntelliJ IDEA 使用说明
    C# static的用法详解
    wpf 加载窗体界面时出现异常System.IO.FileNotFoundException
    ObservableCollection绑定到TextBox
    Lambda表达式(转载)
    C#中out和ref之间的区别 转载
    WPF序列化与反序列化
    软件版本号规范与命名原则 转载
    WPF DataGrid滚动条滑动的时候背景色错乱或显示不全
  • 原文地址:https://www.cnblogs.com/gmhappy/p/11863946.html
Copyright © 2011-2022 走看看