2015-04-21 138 views
2

有什么办法可以将opencv mat对象转换为base64。C++ OpenCV:将mat转换为base64,反之亦然

我用的是以下网址base64编码和解码:

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

下面是代码片段:

const的无符号字符* inBuffer =的reinterpret_cast(image.data);

+1

可能相关:http://stackoverflow.com/questions/28003981/opencv- cvmat-to-stdifstream-for-base64编码 – NathanOliver

+0

**为什么**你是否在尝试这样做?编码二进制数据,像一个图像到base64将导致可怕的膨胀。 – berak

+0

在C++和java之间传送图像数据。我可以很容易地使用java将图像数据转换为base64。而将opencv mat转换为base64是忙碌的 –

回答

2

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

该代码在page工作正常!

因此,这里是我的代码:

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()); 

,如果你只是想一个垫转换成的base64,你需要确保垫尺寸和渠道。对于CV_8UC1,这将工作:

string encoded = base64_encode(img.data, img.rows * img.cols); 
1

我已经创造了这个使用QT5和OpenCV的例子:

cv::Mat1b image; 
this->cameraList[i]->getImage(image); 
std::vector<uint8_t> buffer; 
cv::imencode(".png", image, buffer); 
QByteArray byteArray = QByteArray::fromRawData((const char*)buffer.data(), buffer.size()); 
QString base64Image(byteArray.toBase64()); 
base64ImageList.append(base64Image); 
相关问题