我是 opencv 和 c++ 的新手,我被迫在我的 delphi 应用程序上使用 c++ 来使用 opencv。所以我从 dll 中导出这个函数,以便在图像处理后将指向 mat 的指针转换回字节。这是我使用的功能:
DllExport unsigned char* MatToBytes(cv::Mat *src, int &outLen)
{
cv::Mat &matCvrt = *src;
std::vector<unsigned char> *poutVet = new std::vector<unsigned char>();
std::vector<unsigned char> &outVet = *poutVet;
imencode(".png", matCvrt, outVet);
outLen = outVet.size();
unsigned char* outBytes;
outBytes = new unsigned char[outVet.size()];
std::copy(outVet.begin(), outVet.end(), outBytes);
vector<unsigned char>().swap(outVet);
return outBytes;
}
我现在已经研究了一整天,但找不到答案。如果我删除代码
vector<unsigned char>().swap(outVet);
它可以正常工作,但会泄漏内存。如果我把它放在代码中,我会得到“调试断言失败!” 希望有人能帮帮我,非常感谢。