gpt4 book ai didi

c++ - 将 opencv::Mat 转换为 std::string 得到 std::bad_alloc

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:03 26 4
gpt4 key购买 nike

我有一个大小为 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 函数,因为它更灵活、更安全。

您可以使用此函数将 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,您可以自行决定使用它。

关于c++ - 将 opencv::Mat 转换为 std::string 得到 std::bad_alloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58481145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com