opencv imencode()缓冲区异常

时间:2017-01-13 14:59:10

标签: c++ opencv

我正在使用这些代码将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);

2 个答案:

答案 0 :(得分:1)

解决此问题的一些机会:

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

好主意更新到opencv 3.2

答案 1 :(得分:1)

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

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