gpt4 book ai didi

c++ - OpenCV 矩阵乘法断言在类内部失败,但在外部没有

转载 作者:太空宇宙 更新时间:2023-11-03 22:13:08 30 4
gpt4 key购买 nike

尝试避免使用 C 风格的结构并创建我的第一个 C++ 类。虽然有一个问题...

好的,所以我使用 OpenCv 定义了一个最小类来显示我遇到的问题。矩阵数学测试.cpp:

#include "MatrixMathTest.h"

MatrixMathTest::MatrixMathTest(){

float temp_A[] = {1.0, 1.0, 0.0, 1.0};
Mat A = Mat(2,2, CV_32F , temp_A);
float temp_x[] = {3.0, 2.0};
Mat x = Mat(2,1, CV_32F , temp_x);
}

void MatrixMathTest::doSomeMatrixCalcs(){
x = A * x; //expecting matrix mults, not element wise mults
A = A.inv(); //proper matrix inversion
}

然后是 MatrixMathTest.h:

#include "opencv2/opencv.hpp"
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

class MatrixMathTest {

public:
MatrixMathTest();
void MatrixMathTest::doSomeMatrixCalcs();

private:
Mat x;
Mat A;
};

然后运行这个:

#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
#include "MatrixMathTest.h"

using namespace cv;
using namespace std;

void main(int argc, char** argv) {

float temp_A[] = {1.0, 1.0, 0.0, 1.0};
Mat A = Mat(2,2, CV_32F , temp_A);
A = A.inv();
cout << A << endl;

float temp_x[] = {3, 2};
Mat x = Mat(2,1, CV_32F , temp_x);
x = A * x;
cout << x << endl;

MatrixMathTest tester;
tester.doSomeMatrixCalcs();
}

main 中的相同代码将按预期工作,但一旦进入类,它就会失败:

multError

如果我放置 A.inv();第一行我略有不同:

inverse error

当我直接在 main 中以 CV_32F 作为类型运行相同的代码时,没有断言失败。搜索该错误消息,shows people solving it by changing the variable types但是我已经尝试了断言提到的所有不同的数字变量类型等等,它只是留在 CV_32F 因为这是我最后一次尝试。

我认为这与上课有关? ??

但是什么?还是别的?

有些东西(非常基础?)我还没有学会?

... 如果它与类型有关,如何调和最终对同一矩阵进行乘法和求逆的愿望 - 这些断言中的不同类型是否排除了这一点?

最佳答案

您在 MatrixMathTest::MatrixMathTest() 中屏蔽了类变量 Ax。因为您将它们声明为 Mat A = ...,所以您正在初始化这些临时对象,而不是您的类的成员对象。也就是说,当您运行 doSomeMatrixCalcs() 时,您正在使用成员对象 this.Athis.x,但它们从来没有初始化。因此它们包含错误数据,操作失败。

Mat A = ... 替换为 A = ...this.A = ... ,事情应该会更好.

关于c++ - OpenCV 矩阵乘法断言在类内部失败,但在外部没有,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28713589/

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