2011-12-19 21 views
8

Estoy cargando un conjunto de imágenes de prueba a través de OpenCV (en Python) que tienen un tamaño de 128x128, las reconfiguran en vectores (1, 128x128) y las juntan en una matriz para calcular PCA. Estoy usando las nuevas librerias CV2 ...OpenCV PCA Compute en Python

El código:

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)) 

Y Allways falla por parte de PCA (he probado la carga de imágenes y todo, la matriz resultante es como debe ser) ... el error que consigo es:

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()

Respuesta

7

Creo que el problema es con el tamaño de

np.mean(matrix_test, axis=0) 

Su tamaño es (128x128,) y no (1, 128x128). Así, el código de abajo debería funcionar

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

Eso funcionó ... ¡totalmente extrañado, un error tan tonto! ¡Gracias! – Veles

5

También puede poner

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

y la función calcula la media.

+0

Buena respuesta +1 esto me ayudó mucho. También encontré que 'mean = None', es equivalente a esta solución. Aclamaciones – DarkCygnus