Python中的OpenCV PCA计算

Python中的OpenCV PCA计算,python,opencv,pca,Python,Opencv,Pca,我正在通过OpenCV(Python中)加载一组大小为128x128的测试图像,将它们重塑为向量(1128x128),并将它们全部放在一个矩阵中以计算PCA。我正在使用新的cv2图书馆 守则: import os import cv2 as cv import numpy as np matrix_test = None for image in os.listdir('path_to_dir'): imgraw = cv.imread(os.path.join('path_to_di

我正在通过OpenCV(Python中)加载一组大小为128x128的测试图像,将它们重塑为向量(1128x128),并将它们全部放在一个矩阵中以计算PCA。我正在使用新的cv2图书馆

守则:

import os
import cv2 as cv
import numpy as np

matrix_test = None
for image in os.listdir('path_to_dir'):
    imgraw = cv.imread(os.path.join('path_to_dir', image), 0)
    imgvector = imgraw.reshape(128*128)
    try:
        matrix_test = np.vstack((matrix_test, imgvector))
    except:
        matrix_test = imgvector

# PCA
mean, eigenvectors = cv.PCACompute(matrix_test, np.mean(matrix_test, axis=0))
PCA部分总是失败(我测试了图像加载,结果矩阵应该是这样的)…我得到的错误是:

文件“main.py”,第22行,在

平均值,特征向量=cv.pca计算机(矩阵检验,np.平均值(矩阵检验,轴=0))

cv2.error:/path/to/OpenCV-2.3.1/modules/core/src/matmul.cpp:2781:error:(-215)平均值.size()==函数运算符()中的平均值


我认为问题在于这辆车的大小

np.mean(matrix_test, axis=0)
它的大小是(128x128,)而不是(1128x128)。因此,下面的代码应该可以工作

mean, eigenvectors = cv.PCACompute(matrix_test, np.mean(matrix_test, axis=0).reshape(1,-1))
你也可以把

cv.PCACompute(matrix_test, mean = np.array([]))

函数计算平均值。

这就成功了……完全没有做到这一点,这是一个愚蠢的错误!谢谢好答案+1这对我帮助很大。我还发现
mean=None
,相当于这个解决方案。干杯