我正在从事一个项目,我从中捕获用户的面部并将其放在现有模型上。为了结合面部和模型图像,我使用节点中的 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
})