我正在开展这个项目,我正在抓住用户面对并将其放在现有模型上。 要结合面部和模型图像我正在使用节点的gm库;和面部检测我使用opencv。我能够检测到面部并将其放在模型上。 但问题是我的模型具有透明背景但用户不会面对(因为脸部是从相机拍摄的)。
我想删除脸部的背景并使其透明。有没有办法让这成为可能?
以下是我的集成代码:
gm()
.in('-page', '+0+0')
.in("public/" + modelImagePath)
.in('-page', '+130+45')
.in(newDir + '/crp.png')
.mosaic()
.write(resultantImage, function (err) {
if (err) console.log(err);
});
这里crp.png是面部图像,modelimagepath是模型图像 完整的opencv + gm代码:
cv.readImage(newDir + "/zxcv.png", function(err, im){
im.detectObject(cv.FACE_CASCADE, {}, function(err, faces){
console.log("into detec:" + faces.length + "," + faces[0]);
if ( faces.length > 0)
{
var x = faces[0];
gm(newDir + "/zxcv.png")
.crop(x.width,x.height,x.x,x.y)
.write(newDir + '/crp.png', function (err) {
if (err) console.log(err);
});
var modelImagePath = getModelBasedOnSize(hips, skin, waist, weight, 1);
var modelSize = modelImagePath.split("-")[1].split(".")[0];
resultantImage = newDir + "/result-" + modelSize + ".png";
gm()
.in('-page', '+0+0')
.in("public/" + modelImagePath)
.in('-page', '+130+45') // frok -> 95 87 //+105+60 //
.in(newDir + '/crp.png')
.mosaic()
.write(resultantImage, function (err) {
if (err) console.log(err);
res.end(resultantImage.replace('public/', ''));
//res.end(resultImage.replace('public/', ''));
});
}
else{
console.log("into else - pic not present");
var modelImagePath = getModelBasedOnSize(hips, skin, waist, weight, 0);
res.end(modelImagePath.replace('public/', ''));
}
}); //opencv detect face
})