Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何简单地使用OpenCV BackgroundSubstation?_Java_Opencv_Background Subtraction - Fatal编程技术网

Java 如何简单地使用OpenCV BackgroundSubstation?

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"

我是OpenCV的新手,在使用背景替换时遇到问题

我想识别一个人的形象,有一张背景图片和一个人的同一张图片

我尝试了抓取切割算法,也尝试了减法,但都不起作用。现在我尝试使用背景减法,但我似乎不明白。这是我的密码:

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()
。我认为这不是问题所在。