java中抓拍图像_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();

}

}

}

你可能感兴趣的:(java中抓拍图像)