gpt4 book ai didi

java - 使用 javaCV 去除背景的最佳方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-03 23:01:01 24 4
gpt4 key购买 nike

我正在寻找在背景上提取单一颜色并在 JavaCV 中动态将其替换为一些图片的最佳方法。我写了一个非常简单的方法,逐像素读取并在颜色为绿色时替换它。这非常慢,即使我将它分成几个线程,它的运行速度也非常慢。这必须在现场完成,所以我必须找出其他方法。可能更换背景后还要加上水印,所以应用程序一定很快。

有人能帮我找到正确的方法吗?我整天都在尝试寻找其他方法,但是..我发现的所有示例都不起作用,或者我可能不知道如何采用它们来满足我的需要。

这个人 ( http://www.youtube.com/watch?v=WOEuE3D88b0 ) 写道他正在逐像素读取 - 不可能,或者他有非常快的多核工作站。在我的 MacBook Pro 2.5 i5 上它根本不起作用:(

我已经使用了您的示例,并且我认为我已经完全混合了它。我可以看到移动我的面具(黑色背景上的白色),如果我使用 CvCopy,我可以看到背景出现在白点所在的地方。不幸的是,他没有得到要求的结果,但我想我必须非常接近它;)我不得不离开我并替换所有静态对象。你能检查一下我的代码吗?


private static final IplImage back = cvLoadImage("/Users/user/app/eclipse/JavaCV/resources/1.png", CV_LOAD_IMAGE_COLOR);



private static BackgroundSubtractorMOG2 bgs = new BackgroundSubtractorMOG2(30,16,false);

公共(public)静态 IplImage replacePixels2(IplImage img){
IplImage frame = cvCloneImage(img);
//bgs.getBackgroundImage(帧);
IplImage image = IplImage.create(frame.width(), frame.height(), IPL_DEPTH_8U,1);
bgs.apply(帧,图像,-1);


IplROI roi = new IplROI();
roi.xOffset(0);
roi.yOffset(0);
roi.width(frame.width());
roi.height(frame.height());


IplImage backImageWithRoi = frame.roi(roi);


cvCopy(返回, backImageWithRoi, 图像);

返回 ImageWithRoi;
}

我也尝试过 grabCut 但这非常慢并且不能用于更改实时流:(

最好的问候简

最佳答案

既然 JavaCV 是 OpenCV 的接口(interface),那么您必须能够执行 Grabcut 分割

如回答here也是。

关于java - 使用 javaCV 去除背景的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18292375/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com