OpenCV PCA Compute in Python

Vel*_*les 9 python opencv pca

我正在通过OpenCV(在Python中)加载一组尺寸为128x128的测试图像,将它们重新整形为矢量(1,128x128)并将它们全部放在矩阵中以计算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))
Run Code Online (Sandbox Code Playgroud)

它总是在PCA部分失败(我测试了图像加载和所有,结果矩阵是应该如何)...我得到的错误是:

文件"main.py",第22行,in

mean,eigenvectors = cv.PCACompute(matrix_test,np.mean(matri_test,axis = 0))

cv2.error:/path/to/OpenCV-2.3.1/modules/core/src/matmul.cpp:2781:错误:(-215)_mean.size()== mean_sz in function operator()

Dat*_*Chu 8

我认为问题在于尺寸

np.mean(matrix_test, axis=0)
Run Code Online (Sandbox Code Playgroud)

它的大小是(128x128,)而不是(1,128x128).因此,下面的代码应该工作

mean, eigenvectors = cv.PCACompute(matrix_test, np.mean(matrix_test, axis=0).reshape(1,-1))
Run Code Online (Sandbox Code Playgroud)


小智 6

你也可以

cv.PCACompute(matrix_test, mean = np.array([]))
Run Code Online (Sandbox Code Playgroud)

并且该函数计算平均值.

  • 很好的答案+1这对我帮助很大。我还发现`mean=None`相当于这个解决方案。干杯 (2认同)