JavaCV调用摄像头并抓拍图片保存到本地

添加依赖


        
            org.bytedeco
            javacv-platform
            1.4.1
        
        
        
            org.bytedeco.javacpp-presets
            opencv-platform
            3.4.1-1.4.1
        

        
            junit
            junit
            4.12
            test
        

简单测试Java调用本地摄像头

   

OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);//0表示本机摄像头 当然这里也可以换成网络摄像头地址 
    grabber.start();   //开始获取摄像头数据
    CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
    canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭时程序运行结束
    canvas.setAlwaysOnTop(true);
    while(true){
        if(!canvas.isDisplayable()){//窗口是否关闭
            System.out.println("已关闭");
            grabber.stop();//停止抓取
            System.exit(2);//退出
        }
        canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame         frame=grabber.grab(); frame是一帧视频图像
        Thread.sleep(50);//50毫秒刷新一次图像
    }

调用摄像头并抓拍图片保存到本地

public class Javacv {
    public static void main(String[] args) throws FrameGrabber.Exception, InterruptedException {
        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);//0表示本机摄像头  当然这里也可以换成网络摄像头地址
        grabber.start();   //开始获取摄像头数据
        CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口
        canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭时程序运行结束
        canvas.setAlwaysOnTop(true);
        int i=0;
        while(true){
            if(!canvas.isDisplayable()){//窗口是否关闭
                System.out.println("已关闭");
                grabber.stop();//停止抓取
                System.exit(2);//退出
            }
            canvas.showImage(grabber.grab());//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame表示一帧视频图像
            //调用doExecuteFrame()方法,将截取的图片保存在本地
            doExecuteFrame(grabber.grabFrame(),"F:/new/"+i+".jpg");
            Thread.sleep(50);//50毫秒刷新一次图像
            i++;
        }
    }

    /**
     *
     * @param f 表示帧
     * @param targetFileName 存储路径
     */
    public static void doExecuteFrame(Frame f, String targetFileName) {
        if (null ==f ||null ==f.image) {
            return;
        }
        Java2DFrameConverter converter =new Java2DFrameConverter();
        BufferedImage bi =converter.getBufferedImage(f);
        File output =new File(targetFileName);
        try {
            ImageIO.write(bi,"jpg",output);
        }catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

你可能感兴趣的:(JavaCV调用摄像头并抓拍图片保存到本地)