我试图使用opencv (2.4.10)的imencode函数将bmp图像编码为jpg,使用下面的代码。
void test()
{
cv::Mat img = cv::imread("C:\\Users\\Maruf\\Pictures\\bingo.bmp", CV_LOAD_IMAGE_COLOR);
cv::vector<uchar> buf;
cv::imencode(".jpg", img, buf);
return;
}在return语句中,引发以下异常。

为什么会发生这种情况,我如何解决这个问题?
发布于 2017-08-12 08:52:42
由于opencv链接为动态库,您需要确保在相同的堆地址空间中分配和释放内存。
buf -在cv::imencode中分配内存(在opencv中),但在超出作用域时释放(在其他堆空间中)
例如,在您的示例中,您需要在将向量容器放入opencv函数cv::Mat img = cv::imread("C:\Users\Maruf\Pictures\bingo.bmp", CV_LOAD_IMAGE_COLOR); //for instance allocate 10Mb. std::vector buf(10 * 1024 * 1024); cv::imencode(".jpg", img, buf);之前分配内存。
https://stackoverflow.com/questions/38071558
复制相似问题