我有这段代码:
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上成功运行。
我将代码更改为此代码以确保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();
这也是崩溃!
cv::Mat imageRaw(imageHeader->height, imageHeader->width, CV_8UC1);
cv::Mat imageColour = imageRaw.clone();
为什么这个简单的代码会崩溃?
答案 0 :(得分:1)
我发现这个问题非常奇怪!
我忘了在添加后将opencv.hpp包含在我的源文件中,它运行得很好。
很奇怪,因为我没有得到任何编译错误,但是我遇到了运行时错误。
如果您发现openCV行为异常,请确保将opencv.hpp包含在源代码中。它可以帮助您解决您的问题!并非所有的问题都来自于像CroCo所提到的那样缺少这个标题。