2011-01-11 7 views
2

を使用して:謝罪私はOpenCVの質問にSO氾濫していた場合:PPCA余談として新しいC++インタフェース

私は現在、新しいC++インタフェースを使用するように私の古いCコードの上にポートにしようとしていると私は自分の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 

私はPCAスペースを作成しようとしている、そしてそれは計算された平均画像を表示して働いているならば、参照しています。これに他の措置はありますか?

まず、PCA部分空間にイメージを投影する必要がありますか?

答えて

2

あなたのエラーは、おそらくここにある:

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

PCAは、行としてデータベクトルと行列を期待しています。ただし、画像のサイズを同じサイズにすることはできません(次元は同じです)。data.create(2,1,...) - 1はベクトルの次元、つまりピクセル数にする必要があります。その後、作物からあなたのマトリックスにピクセルをコピーします。

関連する問題