gpt4 book ai didi

C++ + OpenCV = 访问冲突读取位置 0x02176000

转载 作者:太空狗 更新时间:2023-10-29 21:07:45 24 4
gpt4 key购买 nike

这段代码实际上一直有效到现在。我不知道是什么导致它现在抛出错误(我实际上不记得对代码进行过任何更改)。在这里(它将图像从文件读取到 OpenCV IplImage 对象,然后将其转换为 jpeg 缓冲区):

  IplImage* fIplImageHeader = cvLoadImage( filePath.c_str() );

vector<int> p;
p.push_back( CV_IMWRITE_JPEG_QUALITY );
p.push_back( 75 ); // JPG quality
vector<unsigned char> buf;
cv::imencode( ".jpg", fIplImageHeader, buf, p ); // this line gives error

完整的错误是:

Unhandled exception at 0x638fee22 in Client.exe: 0xC0000005: Access violation reading location 0x02176000.

fIplImageHeader 包含一个有效的图像,我可以使用以下方法确认:

cvShowImage( "Window", fIplImageHeader );

编辑:

更长的片段:

while ( l < 30 )
{
// path to image
std::stringstream sstm;
string filePath;
sstm << workingDirectory << "/temp/" << k << ".jpg";
filePath = sstm.str();

cout << filePath.c_str() << endl;

// load image to IplImage
IplImage* fIplImageHeader = cvLoadImage( filePath.c_str() );

// convert to JPG
vector<int> p;
p.push_back( CV_IMWRITE_JPEG_QUALITY );
p.push_back( 75 ); // JPG quality
vector<unsigned char> buf;
cv::imencode( ".jpg", fIplImageHeader, buf, p );

// do stuff

k++;
l++;
if (10 == k)
{
k = 0;
}

char key = cvWaitKey( 1000/30 );

cvReleaseImage( &fIplImageHeader );
}

最佳答案

输出缓冲区应该根据输出图像调整大小,但您没有使用 buf 对象指定明确的大小。至少在您的引用文档页面中提到了这一点 http://opencv.willowgarage.com/documentation/cpp/reading_and_writing_images_and_video.html

你能尝试在 buf 上设置一个明确的大小吗?现在在您的代码示例中,它只是一个空 vector 。

编辑:是的,我认为你是对的,如果我在文档页面上多看一眼,它似乎表明 cv::imencode 将进行分配,所以你不应该不得不。如果那是真的,那么你的输入图像真的很大吗?你的内存用完了吗?您还可以进入 cv::imencode 的调试版本吗?

编辑:此页有另一个代码示例 http://opencv.willowgarage.com/documentation/cpp/core_basic_structures.html#Mat

IplImage* img = cvLoadImage("greatwave.jpg", 1);
Mat mtx(img); // convert IplImage* -> cv::Mat

您是否也可以尝试“转换为 cv::Mat”步骤,并将其传递到 cv::imencode 中?

关于C++ + OpenCV = 访问冲突读取位置 0x02176000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4474076/

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