【问题标题】:Sending a Mat object over socket from c++ to Java通过套接字从 C++ 向 Java 发送 Mat 对象
【发布时间】:2013-12-29 00:30:45
【问题描述】:

我对从 C++ 服务器向 Java 客户端发送视频流感兴趣。 C++ 服务器是用 boost/asio 编写的。
我正在考虑使用 opencv 来轻松连接到计算机的 USB 摄像头。但是,我在通过套接字发送 Mat 对象时遇到了麻烦。

我遇到的唯一方法是这样:

Mat frame;
...
int  imgSize = frame.total()*frame.elemSize();
bytes = send(clientSock, frame.data, imgSize, 0))

但我不能以这种方式使用 boost 发送它,因为它必须采用以下形式之一: http://www.boost.org/doc/libs/1_55_0/doc/html/boost_asio/reference/basic_raw_socket/send_to.html

所以我想到了将 frame.data ,imgSize 转换为字符串,并发送这两个缓冲区的容器,但我认为这不是正确的方法。即使是,我如何在 Java 客户端中“重建”图像?

任何想法将不胜感激!

【问题讨论】:

  • 我觉得你必须转换它并不奇怪。我用插座甚至无线电发射器做了类似的事情,并且总是必须将所有内容转换为字符串。从来没有用OpenCV 做过这个,但也许你可以把Mat 保存到一个图像文件4。但您可能需要自己编写。
  • frame.data 类型是“uchar*”,所以我不确定将其转换为字符串是否“安全”。
  • 嗯,只有一种方法可以找到 :) google 的第一页上有很多转化,例如:stackoverflow.com/questions/17746688/…

标签: java c++ opencv boost-asio


【解决方案1】:

您可以尝试使用 Base64 对图像进行编码,以使用 XML 或 JSON 等协议通过套接字发送它们。

Base64 是一组类似的二进制到文本编码方案, 以 ASCII 字符串格式表示二进制数据

这可能不是最有效的方法,但目前对您来说可能是最简单的方法。您可以在 wiki page 上找到有关 Base64 的更多信息,并且可以找到有关将 OpenCV Mat 转换为 Base64 的更多信息 here。还有一些关于如何在 Java 中显示 Base64 图像的教程。

【讨论】:

    【解决方案2】:

    在服务器端,编码为jpeg:

    vector<uchar> buff;
    vector<int> params;
    
    params.push_back(cv::IMWRITE_JPEG_QUALITY);
    //80 keeps the image size under 64KB ,ON MY CAMERA, so I can send the image in one piece
    params.push_back(80);
    cv::imencode(".jpg", frame, buff, params);
    
    boost::asio::ip::udp::socket* _socket;
    ...
    _socket->send_to(boost::asio::buffer(buff), some boost::asio::ip::udp::endpoint, 0, some boost::system::error_code);
    

    在客户端:

    DatagramPacket receivePacket; //stores the data sent from server
    ...
    byte[] receivedImage = receivePacket.getData();
    MatOfByte mob = new MatOfByte(receivedImage);
    Mat img = Highgui.imdecode(mob, Highgui.IMREAD_UNCHANGED);
    

    【讨论】:

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