所以我看到了这里和那里,似乎这是一个常见的问题。虽然,我有一个特定的需求,但在现有的线程中没有解决。
我学校项目的主要思想是模拟你皮肤上的纹身。为此,OpenCV可以通过肤色检测手臂。
感谢cv2.getRotationMatrix2D
和cv2.warpAffine
,我可以用手臂旋转纹身。
#areaAngle is the inclination in degrees of the region of interest
N = cv2.getRotationMatrix2D((tatWidth/2,tatHeight/2),areaAngle,1)
#imgTatoo is the mustache image
roTatoo=cv2.warpAffine(imgTatoo,N,(tatWidth,tatHeight))
但我的问题是这个问题: When the arm is straight, everything is fine (image) 当我倾斜手臂时,一个华丽的black box appears (image again)。
建议的解决方案之一是使用“区域中更大的矩形”裁剪图像。问题是我想要保持完整的纹身,而不仅仅是裁剪的部分。
知道怎么做吗? 感谢
编辑:我试图调整蒙版的大小以匹配对角线高度,但问题是因为这些代码行:tatoo=cv2.resize(imgTatoo,(tatWidth,tatHeight),interpolation=cv2.INTER_AREA)
mask2=cv2.resize(tatMask,(tatWidth,tatHeight),interpolation=cv2.INTER_AREA)
mask2inv=cv2.resize(invTatMask,(tatWidth,tatHeight),interpolation=cv2.INTER_AREA)
更远的地方
#create a ROI mask
roi = frame[fy1:fy2,fx1:fx2]
# print(roi.shape)
#merge the roi mask with the tatoo and the inverted tatoo masks
roi_bg = cv2.bitwise_and(roi,roi,mask = mask2inv)
roi_fg = cv2.bitwise_and(tatoo,tatoo,mask = mask2)
# print(roi_bg.shape,roi_fg.shape)
#merge the background and foreground ROI masks
dst = cv2.add(roi_fg,roi_bg)
如果我尝试调整面具的大小,我必须调整纹身图像的大小,因为数组需要大小相同。