上一篇讲了调用本地摄像头的方法,这一篇在上一篇的基础上再实现抓拍图片并保存至本地!
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知识请点击这位大神的链接: