2011-12-19 2 views
8

サイズが128x128のOpenCV(Pythonで)を使ってテスト画像のセットを読み込み、ベクトル(1、128x128)に再構成し、PCAを計算するためにそれらをまとめて行列に入れます。私は新しいCV2するライブラリを使用しています...OpenCV PCA Pythonで計算する

コード:

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部分(私は画像の読み込みをテストし、すべてが、結果の行列はどのようにすべきであるに失敗します)...私が取得エラーは、次のとおりです。私はこの問題は

np.mean(matrix_test, axis=0) 

そのサイズの大きさである

File "main.py", line 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: error: (-215) _mean.size() == mean_sz in function operator()

答えて

7

考えます(128x128)ではなく(1,128x128)です。したがって、以下のコードは

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

これは、トリックをした...それはまったくそのような愚かな間違いを逃した!ありがとう! – Veles

5

を動作するはずまた

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

を置くことができますし、関数が平均値を計算します。

+0

丁寧な回答+1これは私を助けました。私はまた、 'mean = None'がこの解決法と同等であることも発見しました。乾杯 – DarkCygnus

関連する問題