gpt4 book ai didi

c++ - 将OpenCV图像格式改为matlab格式,调试断言__acrt_first_block == header

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:52:08 25 4
gpt4 key购买 nike

我正在尝试将 OpenCV 图像(类型为 cv::Mat)转换为 matlab 样式格式,因为这是程序的其余部分所需要的。我正在使用以下代码来执行此操作:

inline double* ConvertCVImageToMATLABImage(Mat &CvImage)
{
std::vector<cv::Mat> ColorChannels; // B, G, R channels
cv::split(CvImage, ColorChannels);

// remember to tranpose first because MATLAB is col-major!!!
cv::transpose(ColorChannels[0], ColorChannels[0]);
cv::transpose(ColorChannels[1], ColorChannels[1]);
cv::transpose(ColorChannels[2], ColorChannels[2]);

double *MatlabImage = new double[CvImage.rows*CvImage.cols * 3];

int CounterCompleteImage = 0;
int CounterEachColorChannel = 0;

for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
{
MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[2].data[CounterEachColorChannel]);
}

for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
{
MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[1].data[CounterEachColorChannel]);
}

for (CounterEachColorChannel = 0; CounterEachColorChannel<CvImage.rows*CvImage.cols; ++CounterEachColorChannel, ++CounterCompleteImage)
{
MatlabImage[CounterCompleteImage] = static_cast<double>(ColorChannels[0].data[CounterEachColorChannel]);
}

return MatlabImage;
}

它因调试断言而崩溃:

__acrt_first_block == header

在最后一行(返回 MatlabImage)。追溯断言的来源,似乎与释放 vector ColorChannels有关。我尝试了多种方法,即使用 .clear、使用交换技巧或释放 vector 中的每个项目,但断言仍然存在。

如果嵌入到 C++ 程序的主函数中,这段代码可以完美运行,只是在专用函数中不会如此。

我简化了 main 函数,将上面的代码调用到最低限度:

void main(void)
{
cv::Mat CvImage = imread("E:\\VOC2012\\VOCdevkit\\VOC2012\\JPEGImages\\2008_000027.jpg", CV_LOAD_IMAGE_COLOR); // Read the file
double* Image = ConvertCVImageToMATLABImage(CvImage);
}

问题依旧: assertion

我正在使用 Visual Studio 2015。它在 Release模式下运行良好,但在 Debug模式下抛出调试断言(很明显),特别是它指向 debug_heap.cpp,第 980 行。

谢谢帕特

最佳答案

将 opencv 配置为关闭“BUILD_WITH_STATIC_CRT”,默认情况下打开。当我从一个单独的线程调用 detectMultiScale 并返回调用函数时,我遇到了同样的断言失败,直到我重新编译 opencv 并关闭该标志。

关于c++ - 将OpenCV图像格式改为matlab格式,调试断言__acrt_first_block == header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com