C ++ OpenCV:将mat转换为base64,反之亦然

Ama*_*h R 4 c++ opencv image-processing

无论如何,都可以将opencv mat对象转换为base64。

我使用下面的URL进行base64编码和解码:

http://www.adp-gmbh.ch/cpp/common/base64.html

下面是代码片段:

const unsigned char * inBuffer = reinterpret_cast(image.data);

Jea*_*phe 5

你去!(C ++ 11)
编码img-> jpg-> base64:

        std::vector<uchar> buf;
        cv::imencode(".jpg", img, buf);
        auto *enc_msg = reinterpret_cast<unsigned char*>(buf.data());
        std::string encoded = base64_encode(enc_msg, buf.size());
Run Code Online (Sandbox Code Playgroud)

解码base64-> jpg-> img:

        string dec_jpg =  base64_decode(encoded);
        std::vector<uchar> data(dec_jpg.begin(), dec_jpg.end());
        cv::Mat img = cv::imdecode(cv::Mat(data), 1);
Run Code Online (Sandbox Code Playgroud)

请注意,您可以通过设置IMWRITE_JPEG_QUALITY标志来更改JPEG压缩质量。


小智 3

我遇到了几乎相同的问题,但我正在尝试将 Mat 编码为 jpeg 格式,然后将其转换为 base64。

该页面上的代码运行良好!

所以这是我的代码:

VideoCapture cam(0);
cam>>img;
vector<uchar> buf;
imencode(".jpg", img, buf);
uchar *enc_msg = new uchar[buf.size()];
for(int i=0; i < buf.size(); i++) enc_msg[i] = buf[i];
string encoded = base64_encode(enc_msg, buf.size());
Run Code Online (Sandbox Code Playgroud)

如果你只是想将Mat转换为base64,你需要确定Mat的大小和通道。对于 CV_8UC1,这将起作用:

string encoded = base64_encode(img.data, img.rows * img.cols);
Run Code Online (Sandbox Code Playgroud)