我正在尝试将一个图像复制到另一个图像(在图像的右下角放置一个徽标)。我的代码成功地将徽标复制到了房间图像上,但是当我戴上口罩时,它做了一些奇怪的拉伸。
while(!hasActiveHolder){ }
答案 0 :(得分:2)
您的徽标似乎是彩色图像。这意味着您的<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
图像也是彩色图像。当您将其用作遮罩时,它将被水平拉伸,因为额外的通道会被解释为更多的列。
尝试在阈值之前添加thresh
,并在阈值中使用cvtColor(logo, grayLogo, CV_BGR2GRAY)
。
答案 1 :(得分:1)
遮罩大小和图像大小不相等(这就是为什么拉伸遮罩的原因)。为了解决这个问题,您应该创建蒙版图像并在适当位置复制脱粒徽标。 [编辑]:根据sunreef的回答-口罩中的三个通道也可能是您遇到问题的根源。
下面发布的代码对我有用。
cv::Mat t_roomImage = cv::imread("E:\\Workspace\\KS\\misc\\M4nKr.jpg");
cv::Mat t_logoImage = cv::imread("E:\\Workspace\\KS\\misc\\7sFbv.jpg",0);
cv::threshold(t_logoImage, t_logoImage, 10, 255, CV_THRESH_BINARY);
cv::Mat t_mask = cv::Mat::zeros(t_roomImage.size(), CV_8U);
cv::Rect t_rect = cv::Rect(t_mask.cols - t_logoImage.cols, t_mask.rows -
t_logoImage.rows, t_logoImage.cols, t_logoImage.rows);
t_logoImage.copyTo(t_mask(t_rect));
t_roomImage.setTo(cv::Scalar(255, 0, 0), t_mask);
我使用了setTo,因为我没有徽标图像。在那里,您可以改用copyTo。
结果: