您好,登錄后才能下訂單哦!
今天就跟大家聊聊有關利用JavaCV如何實現抓取并保存攝像頭的影像,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。
實現:
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(); } }
看完上述內容,你們對利用JavaCV如何實現抓取并保存攝像頭的影像有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。