完整项目地址:https://download.csdn.net/download/weixin_41883161/89938027
一键抠图是一种图像处理技术,旨在自动将图像中的前景对象从背景中分离出来。它可以帮助用户快速、准确地实现抠图效果,无需手动绘制边界或进行复杂的图像编辑操作。 一键抠图的原理通常基于计算机视觉和机器学习技术。它使用深度神经网络模型,通过训练大量的图像样本,学习如何识别和分离前景对象和背景。这些模型能够理解图像中的像素信息和上下文,并根据学习到的知识进行像素级别的分割。
测试代码入口
public final class AnimeSegExample {
private static final Logger logger = LoggerFactory.getLogger(AnimeSegExample.class);
@SneakyThrows
@Test
public void test1() {
Path imageFile = Paths.get("src/test/resources/anime-girl.jpg");
Image img = BufferedImageFactory.getInstance().fromFile(imageFile);
try (IsNetModel isNetModel = new IsNetModel("models/", "anime.onnx", 1, false, false, Device.cpu())) {
Image segImg = isNetModel.predict(img);
BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
bufferedImage = ImageUtils.removeBg(bufferedImage);
ImageUtils.saveBufferedImage(bufferedImage, "anime-girl.png", "src/test/output");
}
}
}
测试代码入口
public final class HumanSegExample {
@SneakyThrows
@Test
public void test1() {
Path imageFile = Paths.get("src/test/resources/fullbody2.jpg");
Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
try (UNetHumanSegModel detector = new UNetHumanSegModel("models/", "human.onnx", 1, false, false, Device.cpu())) {
Image segImg = detector.predict(img);
BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
bufferedImage = ImageUtils.removeBg(bufferedImage);
ImageUtils.saveBufferedImage(bufferedImage, "fullbody2.jpg", "src/test/output/");
}
}
}
类位置top.aias.seg.ClothSegExample
代码入口
@SneakyThrows
@Test
public void test1() {
Path imageFile = Paths.get("src/test/resources/full_body.jpg");
Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
// clothCategory 4个值: 1,2,3,4 (1 上半身, 2 下半身, 3 连体衣, 4 所有)
try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 1, 1, false, Device.cpu())) {
Image segImg = detector.predict(img);
BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
bufferedImage = ImageUtils.removeBg(bufferedImage);
ImageUtils.saveBufferedImage(bufferedImage, "full_body_cloth_category_1.jpg", "src/test/output");
}
}
代码入口
@SneakyThrows
@Test
public void test2() {
Path imageFile = Paths.get("src/test/resources/full_body.jpg");
Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
// clothCategory 4个值: 1,2,3,4 (1 上半身, 2 下半身, 3 连体衣, 4 所有)
try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 2, 1, false, Device.cpu())) {
Image segImg = detector.predict(img);
BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
bufferedImage = ImageUtils.removeBg(bufferedImage);
ImageUtils.saveBufferedImage(bufferedImage, "full_body_cloth_category_2.jpg", "src/test/output");
}
}
@SneakyThrows
@Test
public void test4() {
Path imageFile = Paths.get("src/test/resources/full_body.jpg");
Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
// clothCategory 4个值: 1,2,3,4 (1 上半身, 2 下半身, 3 连体衣, 4 所有)
try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 4, 1, false, Device.cpu())) {
Image segImg = detector.predict(img);
BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
bufferedImage = ImageUtils.removeBg(bufferedImage);
ImageUtils.saveBufferedImage(bufferedImage, "full_body_cloth_category_4.jpg", "src/test/output");
}
}
代码入口
@SneakyThrows
@Test
public void test3() {
Path imageFile = Paths.get("src/test/resources/fullbody3.jpg");
Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
// clothCategory 4个值: 1,2,3,4 (1 上半身, 2 下半身, 3 连体衣, 4 所有)
try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 3, 1, false, Device.cpu())) {
Image segImg = detector.predict(img);
BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
bufferedImage = ImageUtils.removeBg(bufferedImage);
ImageUtils.saveBufferedImage(bufferedImage, "fullbody3.jpg", "src/test/output");
}
}
测试代码入口
@SneakyThrows
@Test
public void test1() {
Path imageFile = Paths.get("src/test/resources/beauty.jpg");
Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
// u2net.onnx
// u2netp.onnx
// silueta.onnx
try (UNetModel model = new UNetModel("models/", "u2net.onnx", 1, false, true, Device.cpu())) {
Image segImg = model.predict(img);
BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
BufferedImage bImg = ImageUtils.removeBg(bufferedImage);
ImageUtils.saveBufferedImage(bImg, "beauty.jpg", "src/test/output");
}
}
完整项目地址:https://download.csdn.net/download/weixin_41883161/89938027
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有