protobuf3 c++接口 demo

推荐链接:
https://www.cnblogs.com/DswCnblog/p/6700660.html
https://blog.youkuaiyun.com/baidu_32237719/article/details/100034758
https://www.cnblogs.com/sanshengshui/p/9739521.html
https://blog.youkuaiyun.com/lcuwb/article/details/90705397
https://blog.youkuaiyun.com/hulinku/article/details/80827018
https://www.cnblogs.com/DswCnblog/p/6703660.html

以下是一个简单的C++ protobuf传输图像数据的demo: 首先需要安装protobuf库,可以参考官方文档进行安装。 然后定义一个.proto文件,例如: ```protobuf syntax = "proto3"; package image; message Image { int32 width = 1; int32 height = 2; bytes data = 3; } ``` 这个.proto文件定义了一个名为Image的message,包含图像的宽度、高度和数据。 接着使用protobuf编译器将.proto文件编译成C++代码: ``` protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/image.proto ``` 其中$SRC_DIR是.proto文件所在的目录,$DST_DIR是输出目录。 编译后会生成image.pb.h和image.pb.cc两个文件,在代码中包含头文件image.pb.h即可使用。 下面是一个简单的示例代码: ```c++ #include <iostream> #include <fstream> #include <string> #include <opencv2/opencv.hpp> #include "image.pb.h" using namespace std; using namespace cv; int main() { Mat img = imread("test.jpg"); if (img.empty()) { cerr << "Failed to read image" << endl; return -1; } // 构建protobuf message image::Image image_msg; image_msg.set_width(img.cols); image_msg.set_height(img.rows); string data; imencode(".jpg", img, data); image_msg.set_data(data); // 将protobuf message序列化为字符串 string serialized_data = image_msg.SerializeAsString(); // 从字符串中反序列化出protobuf message image::Image received_image_msg; received_image_msg.ParseFromString(serialized_data); // 将protobuf message中的图像数据解码为OpenCV的Mat对象 Mat received_img = imdecode( Mat(received_image_msg.data().data(), received_image_msg.data().size(), CV_8UC1), IMREAD_COLOR ); // 显示接收到的图像 imshow("Received Image", received_img); waitKey(0); return 0; } ``` 在这个示例中,我们先使用OpenCV读取一张图像,然后将图像数据存储到protobuf message中,并将protobuf message序列化为字符串。 然后我们从字符串中反序列化出protobuf message,并将图像数据解码为OpenCV的Mat对象,最后显示接收到的图像。 注意,在实际应用中,需要使用网络传输将序列化后的字符串发送给接收方,这里只是为了演示方便,使用字符串直接传输。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值