我在Windows机器上安装了Java Open CV Server。 多个Android客户端使用套接字编程连接到服务器,并希望通过套接字将当前相机帧的Mat对象发送到服务器,并在处理后从服务器接收回Mat对象。
如何通过Socket将Mat对象从Android Java发送到桌面Java?
我看过很多从c ++到Java的Mat,但是我找不到Java 到Java !!
答案 0 :(得分:0)
将Mat转换为BufferedImage对象,然后通过套接字将其作为字节发送。 OpenCV已经有了Mattobmp函数,那么你可以将位图转换为字节数组。通过BufferedOutputStream通过套接字发送此字节数组。在接收器端,很容易从你得到的字节中恢复Mat对象(首先从字节数组中的原始数据中获取BufferedImage),然后将其转换回Mat。
这对我来说很好。
我的一些代码片段:
发信人:
Bitmap bmp = ...
Utils.MattoBmp(mat, bmp)
byte[] bytes = new ...;
bmp.compress(...,..., bytes)
//then send the bytes by DataOutputStream.write
接收器:
//Read the DataInputStream data to an OutputStream
byte[] bytes = outputstream.toByteArray();
你需要做一些技巧才能将字节恢复到Image对象
然后创建另一个Mat对象,用图像数据填充其内容。这是我发现的一种较慢的方法,如果有人能提出更快的方法,我会很高兴。