Question

En aparté: Toutes mes excuses si j'inondant des questions SO OpenCV: p

Je suis en train actuellement au port sur mon ancien code C pour utiliser la nouvelle interface C ++ et je dois au point où je rebuilidng ma classe Eigenfaces face recogniser.

 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

Je suis en train de créer l'espace PCA, et voir si elle fonctionne en affichant l'image moyenne calculée. Y at-il d'autres mesures à ce sujet?

Peut-être que je dois projeter les images sur le sous-espace PCA d'abord?

Était-ce utile?

La solution

Votre erreur est probablement ici:

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

PCA attend une matrice avec les vecteurs de données sous forme de lignes. Cependant, vous ne l'échelle les images à la même taille afin qu'ils aient le même nombre de pixels (si la dimension est la même), également data.create(2,1,...) - les besoins de 1 être la dimension de votre vecteur, à savoir le nombre de vos pixels. Ensuite, copiez les pixels de la culture à votre matrice.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top