详解使用JavaCV/OpenCV抓取并存储摄像头图像
程序员文章站
2024-03-02 18:27:46
本程序通过jframe实时显示本机摄像头图像,并将图像存储到一个缓冲区,当用户用鼠标点击jframe中任何区域时,显示抓取图像的简单动画,同时保存缓冲区的图像到磁盘文件中。...
本程序通过jframe实时显示本机摄像头图像,并将图像存储到一个缓冲区,当用户用鼠标点击jframe中任何区域时,显示抓取图像的简单动画,同时保存缓冲区的图像到磁盘文件中。点击jframe关闭按钮可以退出程序。
实现:
import java.awt.graphics2d; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.mouseadapter; import java.awt.event.mouseevent; import java.awt.image.bufferedimage; import java.io.file; import java.io.ioexception; import javax.imageio.imageio; import javax.swing.timer; import com.googlecode.javacv.canvasframe; import com.googlecode.javacv.opencvframegrabber; import com.googlecode.javacv.cpp.opencv_core.iplimage; import static com.googlecode.javacv.cpp.opencv_core.cvreleaseimage; /** * * use javacv/opencv to capture camera images * * there are two functions in this demo: * 1) show real-time camera images * 2) capture camera images by mouse-clicking anywhere in the jframe, * the jpg file is saved in a hard-coded path. * * @author ljs * 2011-08-19 * */ public class cameracapture { public static string savedimagefile = "c:\\tmp\\my.jpg"; //timer for image capture animation static class timeraction implements actionlistener { private graphics2d g; private canvasframe canvasframe; private int width,height; private int delta=10; private int count = 0; private timer timer; public void settimer(timer timer){ this.timer = timer; } public timeraction(canvasframe canvasframe){ this.g = (graphics2d)canvasframe.getcanvas().getgraphics(); this.canvasframe = canvasframe; this.width = canvasframe.getcanvas().getwidth(); this.height = canvasframe.getcanvas().getheight(); } public void actionperformed(actionevent e) { int offset = delta*count; if(width-offset>=offset && height-offset >= offset) { g.drawrect(offset, offset, width-2*offset, height-2*offset); canvasframe.repaint(); count++; }else{ //when animation is done, reset count and stop timer. timer.stop(); count = 0; } } } public static void main(string[] args) throws exception { //open camera source opencvframegrabber grabber = new opencvframegrabber(0); grabber.start(); //create a frame for real-time image display canvasframe canvasframe = new canvasframe("camera"); iplimage image = grabber.grab(); int width = image.width(); int height = image.height(); canvasframe.setcanvassize(width, height); //onscreen buffer for image capture final bufferedimage bimage = new bufferedimage(width, height, bufferedimage.type_int_rgb); graphics2d bgraphics = bimage.creategraphics(); //animation timer timeraction timeraction = new timeraction(canvasframe); final timer timer=new timer(10, timeraction); timeraction.settimer(timer); //click the frame to capture an image canvasframe.getcanvas().addmouselistener(new mouseadapter(){ public void mouseclicked(mouseevent e){ timer.start(); //start animation try { imageio.write(bimage, "jpg", new file(savedimagefile)); } catch (ioexception e1) { e1.printstacktrace(); } } }); //real-time image display while(canvasframe.isvisible() && (image=grabber.grab()) != null){ if(!timer.isrunning()) { //when animation is on, pause real-time display canvasframe.showimage(image); //draw the onscreen image simutaneously bgraphics.drawimage(image.getbufferedimage(),null,0,0); } } //release resources cvreleaseimage(image); grabber.stop(); canvasframe.dispose(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇: 搭建