簡體   English   中英

將 opencv::Mat 轉換為 std::string 給出 std::bad_alloc

[英]Convert opencv::Mat to std::string gives std::bad_alloc

我有一個大小為2064x1544cv::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM