首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从MOG2获取前台

无法从MOG2获取前台
EN

Stack Overflow用户
提问于 2014-05-02 05:53:55
回答 1查看 739关注 0票数 0

我是OpenCV/JavaCV的新手,我正在尝试使用JavaCV实现JavaCV。然而,我似乎无法得到前景图像。背景很好。但是,当我运行apply()时,我无法获得前景图像。下面的代码是我当前的实现。为了比较帧与背景,我比较了每个像素从背景图像到当前帧。但是,我知道MOG2应该返回前景图像。

代码语言:javascript
复制
import java.awt.Color;
import java.awt.image.BufferedImage;

import com.googlecode.javacv.CanvasFrame;
import com.googlecode.javacv.FrameGrabber;
import com.googlecode.javacv.FrameGrabber.Exception;
import com.googlecode.javacv.cpp.opencv_core.IplImage;
import com.googlecode.javacv.cpp.opencv_video.BackgroundSubtractorMOG2;



public class Mog2Test {

/**
 * @param args
 * @throws Exception 
 */
public static void main(String[] args) throws Exception {
    BackgroundSubtractorMOG2 mog=new BackgroundSubtractorMOG2(10, 10, false);

    FrameGrabber grabber= FrameGrabber.createDefault(0);
    grabber.start();

    IplImage foreground;
    IplImage background = null;
    IplImage crrntFrame;

    CanvasFrame frame = new CanvasFrame("Output");

    while(frame.isVisible() && (crrntFrame=grabber.grab())!=null){
        foreground=crrntFrame.clone();
        background=crrntFrame.clone();

        mog.apply(crrntFrame, foreground,.01);
        mog.getBackgroundImage(background);
        BufferedImage bfiBack=background.getBufferedImage();
        BufferedImage bficrrnt = crrntFrame.getBufferedImage();




        for(int x=0; x<bficrrnt.getWidth(); x++){
            for(int y=0; y<bficrrnt.getHeight(); y++){
            //  System.out.println(x+" "+y);
                Color cc = new Color(bficrrnt.getRGB(x, y));
                Color bgc = new Color(bfiBack.getRGB(x, y));

                int bgGray= (bgc.getRed()+bgc.getGreen()+bgc.getBlue())/3;
                int cGray=(cc.getRed()+cc.getBlue()+cc.getGreen())/3;

                if(!(cGray<bgGray+5 && cGray> bgGray-5)){
                    bficrrnt.setRGB(x, y, 0);
                }
            }
        }

        frame.showImage(bficrrnt);


    }

    grabber.stop();
    frame.dispose();

}

}

如您所见,我通过克隆抓取的图像来初始化前台变量。在通过apply()运行它之后,前台变量不会显示任何编辑符号。它在捕获当前帧时显示它。我做错了什么?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-02 13:31:12

你能提供更多的信息吗?你所说的“看不出前景图像”是什么意思?你怎么会意识到你“没有”?是空的吗?当你试图展示它的时候,它只是黑色的吗?

我使用的是C++,但当我试图在一个窗口显示其他图像时,前景图像也出现了问题。我首先必须将图像从灰色转换为rgb-颜色空间(在C++中有用于此的方法cvtColor(InputArray src, OutputArray dst, int code, int dstCn=0) )。也许尝试这个可以帮助你,但也许没有,因为我不知道你的确切问题是什么;-)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23421652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档