所以我很高兴在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
在如此简单的接口调用中我做错了什么?
通过仔细阅读文档找到了我自己的答案:https://docs.opencv.org/4.x/d2/de8/group__core__array.html
计算对称矩阵的特征值和特征向量。 还回答问题的可选“复杂”部分。