我想在检测到眼睛的位置插入太阳镜(png图像)(仅考虑平面内旋转)。我们使用内置的haar级联检测器来检测matlab中的眼睛。目前通过边界框突出检测到的眼睛返回了图像中眼睛的位置。让我知道它是如何完成的(我是matlab的初学者)。
答案 0 :(得分:0)
(假设两个图像都是灰度图像,但扩展到rgb并不困难。未经检查,我不承诺我在某些时候没有翻转x / y坐标。)
如果您的眼睛位置大致在同一水平线上,例如 直面:
face = your face image
ohyeah = your sunglasses image
fspan = horizontal distance between eyes, in pixels
(You should be able to get this easily from the bounding box info)
gspan = ditto for the sunglasses image
(You can do this manually - only need to measure it once)
cpos = central position, [x y] of the eyes
(Again, calc from bounding box)
检查您是否需要调整太阳镜图像的大小 - 可能只需要大于或小于您需要的尺寸:
sr = fspan/gspan;
if abs(sr-1)>thresh;
ohyeah = imresize(ohyeah, sr);
end
现在,我们找到左上角和右下角:
pos1 = pos - ceil(size(ohyeah)/2);
pos2 = pos1 + size(ohyeah) - 1;
注意:您可能需要/需要检查这些值是否超出原始图像的外边缘。
如果上述值是face
的可接受索引,您只需复制太阳镜图像:
face2 = face;
face2(pos1(1):pos2(1),pos1(2):pos2(2))=ohyeah;
imshow(face2);
这显然只是将一个矩形贴在正确的位置。你也可以更漂亮并使用面具,见下文:
对于旋转面:
1)旋转并调整眼镜图像的大小以匹配(例如,如果您知道眼镜图像上您希望眼睛中心的点是简单的几何形状)。
2)制作一个BW面具,即眼镜所在的位置为1,否则为0(如果您的图像位于黑色背景上则相对容易)。
3)找到需要戴上眼镜的位置
4)剪掉脸部图像的适当部分:
face2 = face(pos1(1):pos2(1),pos1(2):pos2(2));
5)用太阳镜图片替换它的相应部分:
face2(BW) = ohyeah(BW);
6)将其粘贴回原始图像
face(pos1(1):pos2(1),pos1(2):pos2(2)) = face2;