通过套接字将OpenCV Mat对象从Android Java发送到Java

时间:2015-06-15 11:09:55

标签: java android sockets opencv

我在Windows机器上安装了Java Open CV Server。 多个Android客户端使用套接字编程连接到服务器,并希望通过套接字将当前相机帧的Mat对象发送到服务器,并在处理后从服务器接收回Mat对象。

如何通过Socket将Mat对象从Android Java发送到桌面Java?

  

我看过很多从c ++到Java的Mat,但是我找不到Java   到Java !!

1 个答案:

答案 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对象,用图像数据填充其内容。这是我发现的一种较慢的方法,如果有人能提出更快的方法,我会很高兴。