2011-12-19 3 views
8

크기가 128x128 인 OpenCV (Python)를 통해 테스트 이미지 집합을로드하고이를 벡터 (1, 128x128)로 바꿔서 모두 모아서 PCA를 계산합니다. 나는 새로운 CV2 libaries를 사용하고 있습니다 ...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)) 

그리고 그것은에 allways PCA에 부분 (I 이미지 로딩을 시험하고 모두가 결과 매트릭스는 어떻게해야입니다 실패) ... 내가 오류는 다음과 같습니다

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

나는 문제가

np.mean(matrix_test, axis=0) 

크기의 크기라고 생각합니다 (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