【发布时间】:2016-04-23 18:27:26
【问题描述】:
我有一个 Python 服务器,它使用 OpenCV 在图像上绘制一些东西。之后,我想通过之前打开的socketserver 将生成的图像发送到 Android 设备。对于图像,我还想发送一个字符串,因此我构建了一个要发送的 JSON 对象。 Android 应用程序接收到的对象包含这两个元素,但图像是 OpenCV Mat 对象的字符串表示形式。
我找不到任何关于如何在 byte 数组中转换这种图像表示的方法,以便我可以在 Android 应用程序中重建图像并显示它。
如何正确发送图像,然后在 Android 应用中进行转换?
这是我用于构建图像、JSON 并发送它的 Python 脚本:
imgou = numpy.zeros((numpy.size(mat_image, 0), numpy.size(mat_image, 1), 3), numpy.uint8)
cv2.drawContours(imgou, cont, idx, (0,255,0), 3)
print "build json"
outjson = {}
outjson['img'] = numpy.array_str(imgou)
outjson['leaf'] = leaf
json_data = json.dumps(outjson)
self.request.sendall(json_data)
这是处理 JSON 的 Android 应用的代码:
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
...
JSONObject json = new JSONObject(sb.toString());
String leaf_name = json.getString("leaf");
String mat_string = json.getString("img");
byte[] raw_data = mat_string.getBytes("utf-8");
Mat mat_img = new Mat();
mat_img.put(0, 0, raw_data);
此时我应该在mat_img 中准备好将Mat 对象写入文件然后显示。
【问题讨论】:
标签: android python json opencv