OpenCV 4.5 产生错误的特征向量

问题描述 投票:0回答:1

所以我很高兴在WSL2(适用于Linux的Windows子系统)下轻松安装opencv, 乌班图:

apt-get install libopencv-dev

跟随

dpkg -s libopencv-dev | grep Version
回答了我
Version: 4.5.4+dfsg-9Ubuntu4
。我对特征向量感兴趣。 没有什么邪恶的,真正有价值的特征值会做得很好(但是,复杂的特征值也将受到欢迎).

所以我写了一个

CMakeLists.txt

cmake_minimum_required(VERSION 3.5)

project(testcv)
find_package( OpenCV REQUIRED )
include_directories(${OpenCV_INCLUDE_DIRS})
add_executable(testcv testcv.cpp)
target_link_libraries(testcv ${OpenCV_LIBS})

以及以下测试程序

testcv.cpp

#include <iostream>
#include <string>
#include <opencv2/core/mat.hpp>
#include <opencv2/imgproc.hpp>

using namespace cv;
using namespace std;

int main()
{
        float numbers[] =
              { 0, 2,
                1, 0 };
        Mat A = Mat(2,2,CV_32F,numbers);
        Mat eigen_vals, eigen_vecs;
        eigen(A, eigen_vals, eigen_vecs);
        cout << "A: " << A << endl <<
          "eigen_vals: " << eigen_vals << endl <<
          "eigen_vecs: : " << eigen_vecs << endl <<
          "Done." << endl;
        return 0;
}

最后说

cmake .
make
./testcv

抓住我了

A: [0, 2;
 1, 0]
eigen_vals: [0.99999994;
 -0.99999994]
eigen_vecs: : [0.70710677, 0.70710677;
 -0.70710677, 0.70710677]
Done.

说实话?那是错误的!作为比较,我的八度结果:

>> A
A =

   0   2
   1   0

>> lambda
lambda =

Diagonal Matrix

   1.4142        0
        0  -1.4142

>> B
B =

   0.8165  -0.8165
   0.5774   0.5774

>> A*B
ans =

   1.1547   1.1547
   0.8165  -0.8165

在如此简单的接口调用中我做错了什么?

c++ opencv linear-algebra
1个回答
0
投票

通过仔细阅读文档找到了我自己的答案:https://docs.opencv.org/4.x/d2/de8/group__core__array.html

计算对称矩阵的特征值和特征向量。 还回答问题的可选“复杂”部分。

© www.soinside.com 2019 - 2024. All rights reserved.