gpt4 book ai didi

c++ - OpenCV 中的 PCA 使用新的 C++ 接口(interface)

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:25 25 4
gpt4 key购买 nike

顺便说一句:如果我的 OpenCV 问题泛滥成灾,我深表歉意:p

我目前正在尝试移植我的旧 C 代码以使用新的 C++ 接口(interface),我已经到了重建我的 Eigenfaces 人脸识别器类的地步。

 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 子空间?

最佳答案

你的错误可能在这里:

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

PCA 需要一个以行为数据 vector 的矩阵。但是,您永远不会将图像缩放到相同的大小,以便它们具有相同数量的像素(因此尺寸相同),data.create(2,1,...) - 1 需要是 vector 的维度,即像素数。然后将像素从裁剪复制到您的矩阵。

关于c++ - OpenCV 中的 PCA 使用新的 C++ 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4661903/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com