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更新了答案以突出显示这一点。