Java 如何简单地使用OpenCV BackgroundSubstation?
我是OpenCV的新手,在使用背景替换时遇到问题 我想识别一个人的形象,有一张背景图片和一个人的同一张图片 我尝试了抓取切割算法,也尝试了减法,但都不起作用。现在我尝试使用背景减法,但我似乎不明白。这是我的密码:Java 如何简单地使用OpenCV BackgroundSubstation?,java,opencv,background-subtraction,Java,Opencv,Background Subtraction,我是OpenCV的新手,在使用背景替换时遇到问题 我想识别一个人的形象,有一张背景图片和一个人的同一张图片 我尝试了抓取切割算法,也尝试了减法,但都不起作用。现在我尝试使用背景减法,但我似乎不明白。这是我的密码: public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat PersonImage=Highgui.imread("boardWithMe.jpg"
public static void main(String[] args) {
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat PersonImage=Highgui.imread("boardWithMe.jpg");
Mat Image = Highgui.imread("boardWithoutMe.jpg");
BackgroundSubtractorMOG b = new BackgroundSubtractorMOG();
Mat output = new Mat();
b.apply(PersonImage, output,0.0);
Highgui.imwrite("outputImage.jpg", output);
}
我总是得到一张黑色的照片。我应该做什么改变才能让它工作?
(顺便说一句,我使用的是openCV 2.4.13,因此有一个用于BackgroundSubstractorMOG的构造函数)在我脑海中,我认为它将整个图像检测为背景。您是否尝试过在
BackgroundSubtractorMOG
的构造函数中使用参数?更具体地说,nmixtures
和backgroundRatio
。如果我没记错的话,MOG减法器非常依赖于数据,并且取决于数据,您需要调整参数以获得最佳结果。试试看它是怎么回事。嘿!谢谢你的回答!如果我阅读了正确的文档,使用您的建议,我应该按如下方式调用构造函数:newbackgroundsubtractormog(历史、nMixers、backgroundratio);历史参数是什么?我试过:BackgroundSubtractorMOG b=新的BackgroundSubtractorMOG(0,4,0.8);它什么也没变没问题<代码>历史记录用于处理视频帧。我想你可以把它设为1。下面是对所有参数的描述:它仍然不起作用。但我会尝试使用你给我的参数。在你给我的网页中,我看到存在$operator$方法,我使用的$apply$有什么区别吗?这可能是问题的根源吗?因为Java不支持运算符重载,我猜他们用名为apply
的常规方法取代了C++的operator()
。我不认为这是问题所在。在我的头顶上,我认为它检测到了整个图像作为背景。您是否尝试过在BackgroundSubtractorMOG
的构造函数中使用参数?更具体地说,nmixtures
和backgroundRatio
。如果我没记错的话,MOG减法器非常依赖于数据,并且取决于数据,您需要调整参数以获得最佳结果。试试看它是怎么回事。嘿!谢谢你的回答!如果我阅读了正确的文档,使用您的建议,我应该按如下方式调用构造函数:newbackgroundsubtractormog(历史、nMixers、backgroundratio);历史参数是什么?我试过:BackgroundSubtractorMOG b=新的BackgroundSubtractorMOG(0,4,0.8);它什么也没变没问题<代码>历史记录用于处理视频帧。我想你可以把它设为1。下面是对所有参数的描述:它仍然不起作用。但我会尝试使用你给我的参数。在你给我的网页中,我看到存在$operator$方法,我使用的$apply$有什么区别吗?这可能是问题的根源吗?因为Java不支持运算符重载,我猜他们用名为apply
的常规方法取代了C++的operator()
。我认为这不是问题所在。