在Python中计算OpenCV PCA

10 投票
2 回答
13699 浏览
提问于 2025-04-17 08:40

我正在通过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))

但是在PCA的部分总是出错(我测试了图像加载,结果矩阵也正常)……我遇到的错误是:

文件 "main.py",第22行,出错:

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 在函数 operator() 中

2 个回答

7

你还可以放入

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

然后这个函数就会计算出平均值。

10

我觉得问题出在这个东西的大小上。

np.mean(matrix_test, axis=0)

它的大小是 (128x128),而不是 (1, 128x128)。所以下面的代码应该能正常运行。

mean, eigenvectors = cv.PCACompute(matrix_test, np.mean(matrix_test, axis=0).reshape(1,-1))

撰写回答