Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用OpenCV计算特征值、特征向量_C++_Python_Opencv_Scipy - Fatal编程技术网

C++ 使用OpenCV计算特征值、特征向量

C++ 使用OpenCV计算特征值、特征向量,c++,python,opencv,scipy,C++,Python,Opencv,Scipy,我在计算OpenCV中的特征向量和值时遇到问题。我在Python(SciPy)中也做了同样的工作,但在移植代码方面遇到了麻烦 我有两个矩阵,其值为: Sw:[0.0112962962962963, 0.00675925925925926; 0.00675925925925926, 0.007962962962962963] Sb:[0.0530787037037037, 0.01657407407407407; 0.01657407407407407, 0.004606481481481

我在计算OpenCV中的特征向量和值时遇到问题。我在Python(SciPy)中也做了同样的工作,但在移植代码方面遇到了麻烦

我有两个矩阵,其值为:

Sw:[0.0112962962962963, 0.00675925925925926;
  0.00675925925925926, 0.007962962962962963]
Sb:[0.0530787037037037, 0.01657407407407407;
  0.01657407407407407, 0.004606481481481482]
对于上述Sw、Sb的值,使用以下计算SciPy(Python)中的特征值、特征向量:

from numpy import *
from scipy import linalg as la
evals,evecs = la.eig(Sw,Sb)
产生以下结果:

evals:
[ 0.17299805+0.j -8.47412141+0.j]
evecs:
[[ 1.         -0.31926401]
 [-0.54311321  1.        ]]
我正在尝试将上述代码移植到OpenCV(C++API)

对于相同的Sw、Sb值,使用

cv::eigen(Sb,Sb_Eig_Val,Sb_Eig_Vec);
产生不同的值,即:

Sb_Eig_Val
[0.05820394496612978; -0.0005187597809445917]
Sb_Eig_Vec
[0.9553644860284983, 0.2954296850952915;
  -0.2954296850952915, 0.9553644860284983]

我这里遗漏了什么吗?

你在解决两个不同的线性代数问题!考虑:

from scipy import linalg as la
sw=[[0.0112962962962963, 0.00675925925925926],[0.00675925925925926, 0.007962962962962963]]
sb=[[0.0530787037037037, 0.01657407407407407],[0.01657407407407407, 0.004606481481481482]]
print la.eig(sb)
其中:

(array([ 0.05820394+0.j, -0.00051876+0.j]), array([[ 0.95536449, -0.29542969],
   [ 0.29542969,  0.95536449]]))
与openCV完全相同。在
scipy
案例中,您正在解决广义特征值问题,但仅使用一个参数,它假设另一个矩阵是恒等式(这通常是我们所说的对角化的意思)


由于矩阵是对称的,您应该在scipy中使用
eigh
。实对称矩阵给出实特征对,它将停止返回复数。

请编辑您的问题,询问您真正感兴趣的内容。此问题可能更适合