gpt4 book ai didi

c++ - 为什么 cv::meanStdDev 函数在调试时失败并出现异常

转载 作者:可可西里 更新时间:2023-11-01 05:42:04 26 4
gpt4 key购买 nike

我正在为 ios 平台开发一个 opencv 应用程序。我自己编译了 opencv 用于调试和发布方案,但是当我尝试使用调试方案运行 cv::meanStdDev 函数时,应用程序失败并出现异常(使用 Release 时它工作正常)。测试函数非常简单:

float list[] = {1.2,1.2,1.3,0.3,6.5,2.2,0.9,0.8,0.9};
cv::Mat test(1,9,CV_32F, list);
cv::Scalar mean1, stddev1;
cv::meanStdDev(test, mean1, stddev1);
printf("[%f, %f]", mean1.val[0], stddev1.val[0]);

此函数在 Release 方案上正常工作,但在 Debug 上,它会抛出如下异常:

OpenCV Error: Assertion failed (dims == 2 && ((sizes[0] == sz.height && sizes[1] == sz.width) || (allowTransposed && sizes[0] == sz.width && sizes[1] == sz.height))) in create, file /Users/jgoenetxea/libraries/OpenCV-2.4.0/trunk/opencv/modules/core/src/matrix.cpp, line 1375
terminate called throwing an exception

这一行是矩阵类的“创建”函数。在这一点上,kind() 函数在同一个矩阵的 Debug 和 Release 方案中给出了不同的值。 When Debug scheme is selected, because of the result of this kind() function, the execution checks some data with a CV_Assert function invocation, and then fails.

有什么想法吗?有人知道我可以检查什么吗?

最佳答案

这是您的整个计划吗?如果不是,则可能存在堆损坏,由于错误访问 Mat 元素,这在 OpenCV 上很常见。

例如:

Mat<uchar> mat(2,2);
mat.at<float>(1,1)=0.1;

如果在你写的程序段之前有这样的代码,有可能你的堆已经损坏了,那么你必须修复它。在 Release模式下,您可能会破坏另一个不会干扰这部分代码的区域,但在调试中它看起来确实如此。

但如果这是您的全部代码,我也帮不上什么忙……我觉得很合适。

关于c++ - 为什么 cv::meanStdDev 函数在调试时失败并出现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11359721/

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