OpenCV & C++:global cv::Mat 对象返回错误的值



我试图在Windows窗体中使用OpenCV。我创建了一个全局cv::Mat对象,并期望该对象供其他函数使用。然而,每次我初始化全局cv::Mat对象并退出/返回函数时,全局cv::Mat对象的值就会由于未知的原因自动改变。

一个示例代码片段如下:
private: cv::Mat *cvImage;

出于某种原因,我创建了一个名为decode()的函数,它返回cv::Mat。

void copy(){cvImage = &decode();}

cvImage无法通过上述代码获得正确的值。通常是数据、数据端、数据限制、数据艺术和行为0或非预期值。

甚至我试图使用一个局部变量,说cv::Mat img,做一切然后运行cvImage = &img;,每当函数退出或返回时,cvImage的值也会意外地改变。

我想知道为什么会发生这种情况??

指针的使用会产生未定义的行为。不要和Mats一起使用!

don cv::Mat *cvImage;

DO cv::Mat cvImage;

cv::Mats被重新计数,这些指针会破坏它们。

作为提醒:

Mat a,b;  b=a;         // shallow copy, shared pixels (that's probably, what you wanted)
Mat a,b;  b=a.clone(); // deep copy, b will have y copy of a's pixels
编辑:

"由于某种原因,我创建了一个名为decode()的函数,它返回cv::Mat。"

这是你在这里的第一个问题decode创建了一个临时(在离开copy()后被销毁)

void copy(){cvImage = &decode();}

,然后返回它的地址

似乎,cli只能处理POD对象(如指针)

  1. 让decode返回a a Mat*,而不是获取temp的地址

    Mat * decode() {Mat *m = new Mat(100,100,CV_UC8);…返回m;}

  2. let copy delete the old one

    空白拷贝(){如果(cvImage)删除cvImage;cvImage = decode();}

相关内容

  • 没有找到相关文章

最新更新