我在Windows Machine上线程化了Java Open CV Server。多个Android客户端使用套接字编程连接到服务器,并希望通过套接字将当前相机帧的Mat对象发送到服务器,并在处理后从服务器接收回Mat对象。
如何通过套接字将 Mat 对象从 Android Java 发送到桌面 Java?
我看过很多从c ++到Java的Mat,但找不到Java 到爪哇!!
将 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();
您需要执行一些技巧才能将字节恢复到图像对象
然后创建另一个 Mat 对象,用图像数据填充其内容。这是我发现的一种较慢的方法,如果有人能建议更快的方法,我会很高兴。