【问题标题】:OpenCV PCA Compute in PythonPython 中的 OpenCV PCA 计算
【发布时间】:2012-01-23 23:01:38
【问题描述】:

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

均值,特征向量 = 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()

【问题讨论】:

    标签: python opencv pca


    【解决方案1】:

    我认为问题出在大小上

    np.mean(matrix_test, axis=0)
    

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

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

    【讨论】:

    • 成功了……完全错过了,真是个愚蠢的错误!谢谢!
    【解决方案2】:

    你也可以放

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

    然后函数计算平均值。

    【讨论】:

    • 好答案 +1 这对我帮助很大。我还发现mean=None,相当于这个解决方案。干杯
    猜你喜欢
    • 2014-05-02
    • 2016-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    相关资源
    最近更新 更多