Mat 封装成json后用socket传送
时间: 2023-12-05 16:06:40 浏览: 71
C++实现Socket传输json封装的Mat
将Mat封装成JSON格式后,可以使用socket将其传输到远程计算机。以下是一个简单的示例代码,用于将Mat转换为JSON,并通过socket发送到远程计算机:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
#include <cstring>
#include <sys/socket.h>
#include <arpa/inet.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
int sock = socket(AF_INET, SOCK_STREAM, 0);
if(sock == -1)
{
cout << "Failed to create socket." << endl;
return -1;
}
sockaddr_in server;
server.sin_addr.s_addr = inet_addr("127.0.0.1");
server.sin_family = AF_INET;
server.sin_port = htons(8888);
if(connect(sock, (sockaddr*)&server, sizeof(server)) < 0)
{
cout << "Failed to connect to server." << endl;
return -1;
}
Mat image = imread("test.jpg");
if(image.empty())
{
cout << "Failed to load image." << endl;
return -1;
}
// 将Mat转换为JSON格式
int imgSize = image.total() * image.elemSize();
vector<uchar> buff(imgSize);
imencode(".jpg", image, buff);
string imgData(buff.begin(), buff.end());
json j;
j["width"] = image.cols;
j["height"] = image.rows;
j["type"] = image.type();
j["data"] = imgData;
// 将JSON数据发送到远程计算机
string jsonStr = j.dump();
const char* sendData = jsonStr.c_str();
int sendSize = strlen(sendData);
if(send(sock, sendData, sendSize, 0) < 0)
{
cout << "Failed to send data." << endl;
return -1;
}
close(sock);
return 0;
}
```
在这个示例代码中,我们创建了一个socket并连接到远程计算机。然后,我们使用OpenCV读取一张图片,将其编码为JPEG格式,并将Mat转换为JSON格式。最后,我们将JSON数据发送到远程计算机。请注意,在实际应用中,您需要根据具体需求进行修改。
阅读全文