从opencv imencode </unsigned>中删除std :: vector <unsigned char =“”>时出现异常

时间:2013-08-17 13:37:31

标签: opencv

我是opencv和c ++的新手,我不得不在我的delphi app上使用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);

它会正常工作,但泄漏记忆。如果我把它放在代码中,我会得到“Debug Assertion Failed!”希望有人可以帮助我,非常感谢。

2 个答案:

答案 0 :(得分:0)

请勿使用指向std::vector的指针。这个类已经管理了内存分配和释放:

DllExport unsigned char* MatToBytes(cv::Mat *src, int &outLen)
{ 
    std::vector<unsigned char> outVet;
    imencode(".png", *src, outVet);
    outLen = outVet.size();
    unsigned char* outBytes;
    outBytes = new unsigned char[outVet.size()];
    std::copy(outVet.begin(), outVet.end(), outBytes);
    return outBytes;
}

答案 1 :(得分:0)

我自己修好了,我在visual studio 2010上尝试了它并且工作正常。我使用的是opencv的vc11库,所以现在我只需要在visual studio 2012上构建opencv。