gpt4 book ai didi

c++ - 在运行 cvCopyImage/cvResize 时崩溃

转载 作者:太空狗 更新时间:2023-10-29 21:06:47 25 4
gpt4 key购买 nike

我正在使用 OpenCV 2.3 制作简单的网络摄像头程序,但遇到了运行时错误。任何想法将不胜感激。

编译通过但在运行时,我收到以下错误(在下面代码中“读取”函数中的 cvCopyImage/cvResize)。

错误:

OpenCV Error: Bad argument (Unknown array type) in cvarrToMat, file /usr/local/src/OpenCV/OpenCV-2.3.0/modules/core/src/matrix.cpp, line 641
terminate called after throwing an instance of 'cv::Exception'
what(): /usr/local/src/OpenCV/OpenCV-2.3.0/modules/core/src/matrix.cpp:641: error: (-5) Unknown array type in function cvarrToMat

代码摘录:

#include <iostream>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace std;
using namespace cv;

Mat* SampleClassA::dispImg = NULL;

int read()
{
Mat* sharedImg;
sharedImg = getFrame();
if (sharedImg)
{
if (dispImg == NULL)
{
SampleClassA::dispImg = sharedImg;
}
cvCopyImage(sharedImg, SampleClassA::dispImg); // Crashes here.
cvResize(sharedImg, SampleClassA::classifyImg); // Can crash here too when cvCopyImage is commented out.
}
sleep(100);
return 1;
}

Mat* getFrame()
//IplImage* ReadRealTime::getFrame()
{
if (!capture.isOpened()) // Actual capturing part is omitted here.
{
return NULL;
}
Mat frame;
capture >> frame;
return &frame;
}
</code>

我的猜测是我使用 Mat 或指针的方式有问题。我对 OpenCV 和 C/C++ 指针仍然是新手(我在另一个问题 Can't save an image captured from webcam (imwrite compile error with OpenCV 2.3) 中得到了一个有见地的评论,指出可能的“悬挂指针”,但这次是一样的吗?)。

最佳答案

问题是您要返回一个指向堆栈分配变量的指针,该变量在函数结束时自动销毁。

  // ...
Mat frame;
capture >> frame;
return &frame;
} // frame destroyed is at the end of the function yet you return a pointer to it!

您需要在堆上分配帧,以便它在函数结束后继续存在:

  // ...
Mat* frame = new Mat(); // Maybe this needs parameters
capture >> *frame;
return frame;
}

请记住,稍后您需要删除该帧,否则您的应用程序将泄漏内存。

关于c++ - 在运行 cvCopyImage/cvResize 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799321/

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