【问题标题】:Sending a Mat object over socket from Java to Java通过套接字从 Java 向 Java 发送 Mat 对象
【发布时间】:2015-08-31 02:28:42
【问题描述】:

我了解 Java 上的 Sockets 并通过它发送 Int、String、bytes 等。

我只想知道有没有办法将 Mat 对象解码为字节数组,然后通过 java 套接字发送它,然后从接收到的字节中取回 Mat 对象?

到目前为止,这就是我所做的

用于通过套接字发送 Mat

//Sending Mat over Socket

Mat socketmat;      
long  nbytes = socketmat.total() * socketmat.elemSize();
byte[] bytes = new byte[ (int) nbytes ];
socketmat.get(0, 0,bytes);
mybytearray = bytes;

dos = new DataOutputStream(os);
dos.writeLong(nbytes);
dos.write(mybytearray, 0, mybytearray.length);  

dos.flush(); 

用于通过套接字接收垫

//Receiving Mat over Socket

long len = clientData.readLong();  
byte[] data = new byte[ (int) len];
if (len > 0) {
    clientData.readFully(data);
}            
byte[] bytes_ = data;
result_mat.get(0, 0, bytes_ );

【问题讨论】:

  • @Newd ..是的,我现在已经提到了
  • 你试过ObjectOutputStream吗?这对您来说是一个很好的起点,因为它会自动处理序列化/反序列化。
  • 不...我对序列化/反序列化一无所知
  • 不要尝试通过网络发送 Mat。相反, imencode() 将其转换为字节数组并 imdecode() 在另一边。
  • @berak..我该怎么做.....我无法从 imdecode() 检索相同的垫子,因为它将被压缩并更改为 .jpg 或 .png

标签: java sockets opencv mat


【解决方案1】:

我的想法是使用 JNI 使用 FileStorage 类保存 Mat。

以下代码可用于将 Mat 保存为 File Storage

FileStorage storage("image.xml", FileStorage::WRITE);
storage << "img" << mat;
storage.release();

然后使用 Socket 发送文件,然后从 File 中取回 Mat。

FileStorage fs("image.xml", FileStorage::READ);
Mat img;
fs >> img;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2014-01-11
    • 2021-01-11
    • 2011-12-23
    • 2012-08-29
    • 2014-03-24
    • 2017-03-20
    相关资源
    最近更新 更多