微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 boost 库在 websocket 上传输图像

如何解决使用 boost 库在 websocket 上传输图像

我想使用 boost 库在 websocket 上传输图像数据。

我应该如何解决以下错误

首先,我通过参考以下 URL 确认能够传输和接收文本数据。 https://www.boost.org/doc/libs/1_68_0/libs/beast/doc/html/beast/quick_start.html

接下来,虽然我尝试传输图像,但我收到以下错误消息。

 websocket_client.cpp:563:38: error: no matching function for call to 'buffer(cv::Mat&)'

 ws.write(boost::asio::buffer(img));

我所做的如下。

  1. 使用 opencv 将图像文件读取为 'img'。

  2. 更改传输数据的代码

    // Send the message
    
    // ws.write(boost::asio::buffer(std::string(text)));
    
    ws.write(boost::asio::buffer(img));
    

解决方法

cv::Mat 不是缓冲区类型或适应性。如果你有 POD 数据,那么你可以像评论者说的那样“投射”它:

 // don't do this:
 buffer(&img,sizeof(img));

然而,这并不安全:

static_assert(std::is_standard_layout_v<cv::Mat>);
static_assert(std::is_trivial_v<cv::Mat>);

该类型实际上是不可按位复制的。但是因为有一个矩阵,所以可能有一个连续的数据区域

ws.write(net::buffer(img.data,img.total() * img.elemSize()));

这里使用 total()elemSize(),指向文档的链接。

现在,如果接收端已经知道尺寸,这就足够了。如果没有,请先发送它们,例如:

uint32_t dimensions[] { htonl(image_witdh),htonl(image_height) };

std::vector<net::const_buffer> buffers {
    net::buffer(dimensions),net::buffer(img.data,img.total() * img.elemSize())
};
ws.write(buffers);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?