C++ opencv imencode()缓冲区异常
我使用这些代码将Mat图像编码为.jpg格式。它使用的是小图像,但当我放置大图像时,项目会出现异常 中0x76377fb2(ucrtbase.dll)处未处理的异常 ImageRecognition.exe:0xC0000409:0xC0000409 我在Visual Studio 2015中使用opencv2.4.12,我的操作系统是Windows 10。这是我的代码块C++ opencv imencode()缓冲区异常,c++,opencv,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::
cv::threshold(image, image, 100, 255, cv::THRESH_BINARY + cv::THRESH_OTSU);
std::vector<uchar> buf;
imencode(".jpg", image, buf);
cv::threshold(图像,图像,100255,cv::THRESH_BINARY+cv::THRESH_OTSU);
std::载体buf;
imencode(“.jpg”,图像,buf);
解决此问题的一些机会:
尝试在调用std::vector buf(50000)之前分配缓冲区;
我使用了这个解决方案,它对我有效。我会尽快将我的opencv版本升级到3.2
更新opencv 3.2的好主意在调用imencode()之前尝试保留内存:
std::向量缓冲区;
#定义MB 1024*1024
缓冲区大小(200*MB);
cv::imencode(“.png”,图像,缓冲区);
确保image
为8U
或16U
,具有1个或3个通道。Thnaks,你解决了我的一天:对我来说,问题出在摧毁其他地方的向量,而调整大小解决了它!
std::vector<uchar> buffer;
#define MB 1024*1024
buffer.resize(200* MB);
cv::imencode(".png", image, buffer);