Estoy cargando un conjunto de imágenes de prueba a través de OpenCV (en Python) que tienen un tamaño de 128×128, las vuelve a formar en vectores (1, 128×128) y las pongo todas juntas en una matriz para calcular el PCA. Estoy usando las nuevas bibliotecas cv2 …
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 siempre falla en la parte PCA (probé la carga de la imagen y todo, la matriz resultante es como debería ser) … el error que obtengo es:
Archivo “main.py”, línea 22, en
mean, eigenvectors = cv.PCACompute (matrix_test, np.mean (matri_test, axis = 0))
- En sklearn.decomposition.PCA, ¿por qué los componentes son negativos?
- Cargas factoriales utilizando sklearn
- Python scikit learn pca.explained_variance_ratio_ cutoff
- Recuperación de los nombres de las características de la explicación_varianza_ratio_ en PCA con sklearn
- Ejemplo básico para PCA con matplotlib
cv2.error: /path/to/OpenCV-2.3.1/modules/core/src/matmul.cpp:2781: error: (-215) _mean.size () == mean_sz en el operador de funciones ()
Creo que el problema es con el tamaño de
np.mean(matrix_test, axis=0)
Su tamaño es (128×128,) y no (1, 128×128). Así debería funcionar el siguiente código
mean, eigenvectors = cv.PCACompute(matrix_test, np.mean(matrix_test, axis=0).reshape(1,-1))
También puedes poner
cv.PCACompute(matrix_test, mean = np.array([]))
y la función calcula la media.