c – OpenCV:相对于参考图像(图像注册)移动/对齐面部图像
作者:互联网
我是OpenCV2的新手,正致力于一个情感识别项目,并希望将面部图像与参考面部图像对齐.我想在移动到旋转之前使图像转换工作.目前的想法是在x和y坐标上的有限范围内运行搜索,并使用平方差的和作为误差度量来选择最佳x / y参数以对齐图像.我正在使用OpenCV face_cascade功能来检测人脸图像,所有图像都调整为固定(128×128).问题:我需要修改Mat图像的哪些参数才能在x轴和y轴上以正/负方向移动图像?我相信Mat数据类型不再支持setImageROI?我有两个面孔的投资回报率,但我不确定如何使用它们.
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 – 感兴趣的渠道.)
要应用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));
标签:translate,face-recognition,c,opencv,image-processing 来源: https://codeday.me/bug/20191006/1859468.html