c++ cv::mat 转base64
时间: 2023-08-08 19:08:09 浏览: 178
以下是C++中将cv::Mat转换为base64编码的示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstring>
#include <openssl/bio.h>
#include <openssl/evp.h>
#include <openssl/buffer.h>
using namespace std;
using namespace cv;
string base64_encode(unsigned char const* bytes_to_encode, unsigned int in_len) {
BIO *bio, *b64;
BUF_MEM *bptr = BUF_MEM_new();
b64 = BIO_new(BIO_f_base64());
bio = BIO_new(BIO_s_mem());
bio = BIO_push(b64, bio);
BIO_set_flags(bio, BIO_FLAGS_BASE64_NO_NL);
BIO_write(bio, bytes_to_encode, in_len);
BIO_flush(bio);
BIO_get_mem_ptr(bio, &bptr);
string encoded_string(bptr->data, bptr->length);
BIO_free_all(bio);
BUF_MEM_free(bptr);
return encoded_string;
}
int main() {
Mat image = imread("test.jpg");
if (image.empty()) {
cerr << "Failed to load image" << endl;
return -1;
}
vector<uchar> buffer;
imencode(".jpg", image, buffer);
string base64_image = base64_encode(buffer.data(), buffer.size());
cout << "Base64 encoded image: " << base64_image << endl;
return 0;
}
```
在这个示例中,我们首先加载图像,然后将其压缩为JPEG格式,并将压缩的字节转换为base64编码的字符串。我们使用OpenSSL库中的函数来执行实际的base64编码。
请注意,此示例使用C++11,并且需要OpenSSL库。在Ubuntu系统中,您可以通过以下命令安装OpenSSL:
```bash
sudo apt-get install libssl-dev
```
此外,您需要在编译时链接OpenSSL库。在Ubuntu系统中,您可以使用以下命令来编译代码:
```bash
g++ -o main main.cpp -lopencv_core -lopencv_imgcodecs -lssl -lcrypto
```
请注意,我们还需要链接OpenCV库(`opencv_core`和`opencv_imgcodecs`),这些库是用于图像处理的。
阅读全文