Pregunta

Como acotación al margen: Disculpas si estoy inundando SO con preguntas OpenCV: p

Actualmente estoy tratando de puerto sobre mi código C de edad para utilizar la nueva interfaz de C ++ y he llegado al punto en el que estoy rebuilidng mi clase Eigenfaces cara reconocedor.

 Mat img = imread("1.jpg");
 Mat img2 = imread("2.jpg");
 FaceDetector* detect = new HaarDetector("haarcascade_frontalface_alt2.xml");

 // convert to grey scale
 Mat g_img, g_img2;
 cvtColor(img, g_img, CV_BGR2GRAY);
 cvtColor(img2, g_img2, CV_BGR2GRAY);

 // find the faces in the images
 Rect r = detect->getFace(g_img);
 Mat img_roi = g_img(r);

 r = detect->getFace(g_img2);
 Mat img2_roi = g_img2(r);

 // create the data matrix for PCA
 Mat data;
 data.create(2,1, img2_roi.type());
 data.row(0) = img_roi;
 data.row(1) = img2_roi;

 // perform PCA
 Mat averageFace;
 PCA pca(data, averageFace, CV_PCA_DATA_AS_ROW, 2);

 //namedWindow("avg",1); imshow("avg", averageFace); - causes segfault
 //namedWindow("avg",1); imshow("avg", Mat(pca.mean)); - doesn't work

Estoy intentando crear el espacio PCA, y luego ver si está funcionando mediante la visualización de la imagen promedio calculado. ¿Hay otros pasos para esto?

Tal vez tengo que proyectar las imágenes sobre el subespacio PCA en primer lugar?

¿Fue útil?

Solución

Su error es probablemente aquí:

Mat data;
data.create(2,1, img2_roi.type());
data.row(0) = img_roi;
data.row(1) = img2_roi;

PCA espera una matriz con los vectores de datos como filas. Sin embargo, nunca escalar las imágenes al mismo tamaño para que tengan el mismo número de píxeles (por lo que la dimensión es el mismo), también data.create(2,1,...) - las necesidades 1 a ser la dimensión de su vector, es decir, el número de sus píxeles. A continuación, copie los píxeles de la cosecha a su matriz.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top