我使用python3与numpy,scipy和opencv.
我正在尝试将通过OpenCV和连接的相机接口读取的图像转换为二进制字符串,以通过某种网络连接将其发送到json对象中.
我已经尝试将数组作为jpg进行插入并解码UTF-16字符串,但是我得不到可用的结果.例如,用
img = get_image()
converted = cv2.imencode('.jpg', img)[1].tostring()
print(converted)
Run Code Online (Sandbox Code Playgroud)
我得到一个字节字符串作为结果:
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')
Run Code Online (Sandbox Code Playgroud)
UnicodeDecodeError:'utf-16-le'编解码器无法解码位置0-1中的字节:非法UTF-16代理
text = strrrrrr.decode('utf-8')
Run Code Online (Sandbox Code Playgroud)
UnicodeDecodeError:'utf-8'编解码器无法解码位置0的字节0xff:无效的起始字节
我无法找到一种方法来做到这一点.
我也尝试将其转换为base64编码的字符串,如 http://www.programcreek.com/2013/09/convert-image-to-string-in-python/中所述, 但这也不起作用.(这个解决方案不是首选,因为它需要将图像临时写入磁盘,这不是我需要的.最好是图像只能保存在内存中,而不能保存在磁盘上.)
解决方案应包含一种将图像编码为json-conform字符串的方法,以及将其解码回numpy-array的方法,因此可以再次使用cv2.imshow().
谢谢你的帮助.
我想通过使用库中的Geod类来计算两个lon/lat点之间的距离pyproj.
from pyproj import Geod
g = Geod(ellps='WGS84')
lonlat1 = 10.65583081724002, -7.313341167341917
lonlat2 = 10.655830383300781, -7.313340663909912
_, _, dist = g.inv(lonlat1[0], lonlat1[1], lonlat2[0], lonlat2[1])
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
ValueError Traceback (most recent call last)
<ipython-input-5-8ba490aa5fcc> in <module>()
----> 1 _, _, dist = g.inv(lonlat1[0], lonlat1[1], lonlat2[0], lonlat2[1])
/usr/lib/python2.7/dist-packages/pyproj/__init__.pyc in inv(self, lons1, lats1, lons2, lats2, radians)
558 ind, disfloat, dislist, distuple = _copytobuffer(lats2)
559 # call geod_inv function. inputs modified in place.
--> 560 _Geod._inv(self, inx, iny, inz, ind, radians=radians) …Run Code Online (Sandbox Code Playgroud)