Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么此代码会在cvtColor上崩溃?_C++_Opencv - Fatal编程技术网

C++ 为什么此代码会在cvtColor上崩溃?

C++ 为什么此代码会在cvtColor上崩溃?,c++,opencv,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, c

我有以下代码:

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); 
我可以看到imageRaw中有一个有效的图像(我可以在图像视图中看到该图像,它是一个有效的图像)

但随后应用程序在这一行崩溃:

cv::Mat imageColour;
 cv::cvtColor(imageRaw, imageColour, cv::COLOR_BayerGR2BGR); 
cv::Mat imageColour = imageRaw.clone();
似乎创建了一个mat文件,但没有为其分配足够的内存

错误消息是:

Unhandled exception at 0x00007FF7503F992B in test_PictureProcessing.exe: 0xC0000005: Access violation reading location 0x0000000000000023.
我正在使用OpenCv 3。我有类似的代码在openCV 2上成功运行

编辑1 我将代码更改为此代码,以确保imagebuffer是有效的缓冲区,并且我没有初始化ImageColor这一事实不是问题:

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;
 cv::cvtColor(imageRaw, imageColour, cv::COLOR_BayerGR2BGR); 
cv::Mat imageColour = imageRaw.clone();
编辑2 这也是崩溃

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

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

我发现了一个非常奇怪的问题

添加opencv.hpp后,我忘了将其包含到源文件中,它工作得非常好

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


如果您看到openCV的行为异常,请确保在源代码中包含openCV.hpp。它可能会帮助你解决你的问题!并不是所有的问题都是因为CroCo提到的缺少此标题。

是否为
imageBuffer
null(或非常小)?那exposureBuffer呢?我对OpenCV不太熟悉,但我想,在将imageColor用作cvtColor中的输出参数之前,您必须先初始化imageColor。@Mat不,它们足够大,可以容纳图像。另外,当我在VisualStudio中使用图像视图时,我可以看到原始图像,所以缓冲区是有效的,并且足够大。但是我要做一个测试以确保它足够大。
imageHeader->height
imageHeader->width
的实际值是多少?此外,看到“图片”并不能证明您分配了足够的空间。@PaulMcKenzie它们分别是2746和3664。“如果您看到您的openCV行为异常,请确保您的源代码中包含了openCV.hpp。”并非所有问题都是由于缺少此标题造成的。@CroCo更新了答案以突出显示这一点。