为什么这段代码崩溃在cvtColor上?

时间:2015-04-21 14:57:27

标签: c++ opencv

我有这段代码:

void * imageBuffer = reinterpret_cast<void *>(exposureBuffer + imageHeader->imgoffset);
cv::Mat imageRaw(imageHeader->height, imageHeader->width, CV_8UC1, imageBuffer);
cv::Mat imageColour;
cv::cvtColor(imageRaw, imageColour, cv::COLOR_BayerGR2BGR); 

当我运行它并在此行上停止调试器时:

cv::Mat imageColour;

我可以看到imageRaw中有一个有效的图像(我可以在图像视图中看到图像,它是一个有效的图像。)

然后应用程序在此行崩溃:

 cv::cvtColor(imageRaw, imageColour, cv::COLOR_BayerGR2BGR); 

似乎创建了一个mat文件,但没有为它分配足够的内存。

错误消息是:

Unhandled exception at 0x00007FF7503F992B in test_PictureProcessing.exe: 0xC0000005: Access violation reading location 0x0000000000000023.

我正在使用OpenCv 3.我有类似的代码在openCV 2上成功运行。

EDIT1

我将代码更改为此代码以确保imagebuffer是一个有效的缓冲区,而且我没有初始化imageColour的事实不是问题:

void *imageBuffer = new char[imageHeader->height* imageHeader->width];
cv::Mat imageRaw(imageHeader->height, imageHeader->width, CV_8UC1, imageBuffer);
cv::Mat imageColour = imageRaw.clone();

但我仍然在这一行上收到错误:

cv::Mat imageColour = imageRaw.clone();

编辑2

这也是崩溃!

cv::Mat imageRaw(imageHeader->height, imageHeader->width, CV_8UC1);
cv::Mat imageColour = imageRaw.clone();

为什么这个简单的代码会崩溃?

1 个答案:

答案 0 :(得分:1)

我发现这个问题非常奇怪!

我忘了在添加后将opencv.hpp包含在我的源文件中,它运行得很好。

很奇怪,因为我没有得到任何编译错误,但是我遇到了运行时错误。

如果您发现openCV行为异常,请确保将opencv.hpp包含在源代码中。它可以帮助您解决您的问题!并非所有的问题都来自于像CroCo所提到的那样缺少这个标题。