[英]Convert opencv::Mat to std::string gives std::bad_alloc
我有一個大小為2064x1544
的cv::Mat
,我想將其保存為std::string
。
我的代碼很簡單:
std::string image_string(image.begin<unsigned char>(), image.end<unsigned char>());
json["image"] = image_string;
正如我在問題標題中所寫,我遇到了這個錯誤:
std::bad_alloc
有什么問題?
我建議在您的嘗試中使用 OpenCV 的cv::imencode
function,因為它更靈活、更安全。
您可以使用此 function 將cv::Mat
轉換為std::string
。 請注意,您需要指定圖像格式。 您可能希望將 ".png" 更改為 ".jpg" 或cv::imencode(...)
支持的任何內容。
std::string get_mat_as_string(const cv::Mat& cv_buffer_orig) {
std::stringstream ss;
if (!cv_buffer_orig.empty()) {
try {
std::vector<uint8_t> buffer;
cv::imencode(".png", cv_buffer_orig, buffer);
for (auto c : buffer) ss << c;
} catch (std::exception& e) { std::cerr << e.what() << std::endl; }
}
return ss.str();
}
要檢索您將使用的 std::string 內的編碼 cv::Mat
std::string buffer; // must contain encoded image from above function
std::vector<byte> pic_data(buffer.begin(), buffer.end());
cv::Mat mat(pic_data, true);
mat = cv::imdecode(mat, cv::IMREAD_COLOR);
現在mat
包含原始的 cv::Mat。
我最初寫這個(略微編輯)是為了通過網絡傳輸cv::Mat
,您可以自行決定使用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.