gpt4 book ai didi

c++ - OpenCV:相对于引用图像移动/对齐面部图像(图像配准)

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

我是 OpenCV2 的新手,正在从事一个情绪识别项目,我想将面部图像与引用面部图像对齐。我想在移动到旋转之前让图像翻译工作。目前的想法是在 x 和 y 坐标的有限范围内运行搜索,并使用平方差和作为误差度量来选择最佳 x/y 参数来对齐图像。我正在使用 OpenCV face_cascade 函数来检测面部图像,所有图像都调整为固定大小 (128x128)。问题:我需要修改 Mat 图像的哪些参数才能在 x 和 y 轴上沿正/负方向移动图像?我相信 setImageROI 不再受 Mat 数据类型支持?我有两张脸的 ROI,但我不确定如何使用它们。

void alignImage(vector<Rect> faceROIstore, vector<Mat> faceIMGstore)
{
Mat refimg = faceIMGstore[1]; //reference image
Mat dispimg = faceIMGstore[52]; // "displaced" version of reference image
//Rect refROI = faceROIstore[1]; //Bounding box for face in reference image
//Rect dispROI = faceROIstore[52]; //Bounding box for face in displaced image
Mat aligned;

matchTemplate(dispimg, refimg, aligned, CV_TM_SQDIFF_NORMED);
imshow("Aligned image", aligned);
}

这种方法的想法是基于 Image Alignment Tutorial by Richard Szeliski使用 OpenCV 2.4 在 Windows 上工作。非常感谢任何建议。

最佳答案

cv::Mat 确实支持 ROI。 (但它不支持 COI - 感兴趣的 channel 。)

要应用 ROI,您可以使用 operator() 或特殊构造函数:

Mat refimgROI  = faceIMGstore[1](faceROIstore[1]); //reference image ROI
Mat dispimgROI(faceIMGstore[52], faceROIstore[52]); // "displaced" version of reference image ROI

要在置换图像中找到最佳位置,您可以使用 matchTemplate功能。


根据您的评论,我可以建议以下代码,它将在第二个(移位的)补丁附近找到引用补丁的最佳位置:

Mat ref = faceIMGstore[1](faceROIstore[1]);
Mat disp = faceIMGstore[52](faceROIstore[52]);

disp = disp.adjustROI(5,5,5,5); //allow 5 pixel max adjustment in any direction
if(disp.cols < ref.cols || disp.rows < ref.rows)
return 0;
Mat map;
cv::matchTemplate( disp, ref, map, CV_TM_SQDIFF_NORMED );

Point minLoc;
cv::minMaxLoc( map, 0, &minLoc );

Mat adjusted = disp(Rect(minLoc.x, minLoc.y, ref.cols, ref.rows));

关于c++ - OpenCV:相对于引用图像移动/对齐面部图像(图像配准),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888368/

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