【问题标题】:Encoding an opencv image into Base64 doesn't produce a valid image将 opencv 图像编码为 Base64 不会产生有效图像
【发布时间】:2019-05-30 17:45:54
【问题描述】:

我正在尝试将我的 Pi 相机中的图片发送到烧瓶网络服务器。当我对图像进行 Base64 编码时,它似乎没有生成有效的图像。

我可以拍照并通过opencv进行处理。 Base64 编码的图像被传递到网页,但发送的字符串不是有效的图像。为了证明这一点,我保存了图像并使用在线 Base64 转换器对其进行了处理。将此字符串粘贴到网页中会显示图像。

def Take_Picture(camera):
    stream = io.BytesIO()                                           # saving the picture to an in-program stream 
    camera.resolution = (160,120)                                   # set resolution
    camera.capture(stream, format='jpeg', use_video_port=True)      # capture into stream
    mydata = np.fromstring(stream.getvalue(), dtype=np.uint8)       # convert image into numpy array
    img = cv2.imdecode(mydata, -1)                                  # to opencv image
    data = base64.b64encode(img).decode('utf-8')
    print(data)
    cv2.imwrite("test.jpg",img)
    return data

HTML

<img src="data:image/jpeg;charset=utf-8;base64,{{img}}"  alt="Camera View" width="640" height="480">

我得到一个结果

b'AAIAAAAAAAAAAIAAAIAAAAAIAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAIAAAAAA...

来自上面的数据。 但我明白了

/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAIBAQEBAQIBAQECAgICAgQDAgICAgUEBAMEBgUG...

来自test.jpg 来自在线 Base64 转换。将此字符串放在网页中会显示图像。

【问题讨论】:

    标签: python-3.x opencv flask base64


    【解决方案1】:

    以下为我解决了它:

    import cv2
    import base64
    
    # img is a numpy array / opencv image
    _, encoded_img = cv2.imencode('.png', img)  # Works for '.jpg' as well
    base64_img = base64.b64encode(encoded_img).decode("utf-8")
    

    【讨论】:

      【解决方案2】:

      您必须将图像从 numpy 数组转换回可以正确编码为 Base64 的图像! 您现在要做的是将一个 numpy 数组编码为 base64 字符串,这肯定不能给出在线 base64 工具给出的相同结果!

      您需要做的,将您的 numpy 数组传递给 cv2.imencode,它会返回一个缓冲区图像对象,然后您可以将其转换为 base64

      retval, buffer_img= cv2.imencode('.jpg', img)
      data = base64.b64encode(buffer_img)
      

      您可以跳过img = cv2.imdecode(mydata, -1) 并将mydata 直接传递给base64.b64encode(mydata),而图像已经存储在内存中!

      没有openCV图像,openCV图像是一个ndArray。当你执行print(type(img))你会得到&lt;class 'numpy.ndarray'&gt;

      【讨论】:

      • 谢谢,作为一个新手,我花了一天的时间,只是跳过了图像转换&它的工作原理。
      • 不用担心@NeilsS,我很高兴能帮上忙!
      猜你喜欢
      • 2016-05-22
      • 2016-05-25
      • 2017-01-09
      • 2022-11-30
      • 2012-07-09
      • 1970-01-01
      • 1970-01-01
      • 2013-06-10
      • 1970-01-01
      相关资源
      最近更新 更多