【问题标题】:opencv imencode() buffer exceptionopencv imencode() 缓冲区异常
【发布时间】:2022-03-21 23:46:47
【问题描述】:

我正在使用这些代码将 Mat 图像编码为 .jpg 格式。它适用于小图像,但是当我放置大图像时,项目会出现异常

0x76377fb2 (ucrtbase.dll) 中的未处理异常 ImageRecognition.exe:0xC0000409:0xc0000409。

我在 Visual Studio 2015 中使用 opencv2.4.12,我的操作系统是 Windows 10,这是我的代码块。

cv::threshold(image, image, 100, 255, cv::THRESH_BINARY + cv::THRESH_OTSU);
std::vector<uchar> buf;
imencode(".jpg", image, buf);

【问题讨论】:

  • 确保image8U16U,具有1 个或3 个通道。否则将无法正常工作。

标签: c++ opencv


【解决方案1】:

在调用 imencode() 之前尝试保留内存:

std::vector<uchar> buffer;
#define MB 1024*1024
buffer.resize(200* MB);
cv::imencode(".png", image, buffer);

【讨论】:

  • Thnaks,你解决了我的问题:对我来说,问题出现在破坏其他地方的矢量 并且调整大小解决了它!
【解决方案2】:

解决这个问题的一些机会:

在调用std::vector&lt;uchar&gt; buf(50000);之前尝试分配缓冲区 我使用了这个解决方案,它对我有用。我会尽快将我的opencv版本升级到3.2

好主意更新到 opencv 3.2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    相关资源
    最近更新 更多