【发布时间】:2017-04-17 03:04:13
【问题描述】:
我将 python3 与 numpy、scipy 和 opencv 一起使用。
我正在尝试将通过 OpenCV 和连接的相机接口读取的图像转换为二进制字符串,以通过某些网络连接在 json 对象中发送。
我尝试将数组编码为 jpg 并解码 UTF-16 字符串,但没有得到可用的结果。例如,与
img = get_image()
converted = cv2.imencode('.jpg', img)[1].tostring()
print(converted)
我得到一个字节串作为结果:
b'\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x00\x00\x01\x00\x01\x00\x00\xff\xdb\x00C\x00\x02\x01\ x01\x01\x01\x01\x02\x01....
但是这个数据不能作为json对象的内容,因为它包含无效字符。有没有办法可以显示这个字符串后面的真实字节? 我相信\xff代表字节值FF,所以我需要像FFD8FFE0这样的字符串...等等,而不是\xff\xd8\xff\xe0。我做错了什么?
我尝试在上面的代码之后将其编码为 UTF-8 和 UTF16,但我得到了几个错误:
utf_string = converted.decode('utf-16-le')
UnicodeDecodeError:“utf-16-le”编解码器无法解码位置 0-1 中的字节:非法 UTF-16 代理
text = strrrrrr.decode('utf-8')
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
我想不出办法来解决这个问题。
我还尝试将其转换为 base64 编码字符串,如在 http://www.programcreek.com/2013/09/convert-image-to-string-in-python/ 但这也行不通。 (这个解决方案不是首选,因为它需要将图像临时写入磁盘,这不是我所需要的。最好图像应该只保存在内存中,而不是保存在磁盘上。)
解决方案应该包含一种将图像编码为 json-conform 字符串的方法,以及一种将其解码回 numpy-array 的方法,因此它可以再次与 cv2.imshow() 一起使用。
感谢您的帮助。
【问题讨论】:
-
可以使用base64编码"in-memory"