李振海的gravatar头像
李振海 2018-04-13 14:58:43
javacv调用摄像头拍照
​

javacv1.3.3 版本



import java.awt.Font;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;



import javax.imageio.ImageIO;

import javax.swing.JButton;



import org.bytedeco.javacpp.opencv_core.IplImage;

import org.bytedeco.javacv.CanvasFrame;

import org.bytedeco.javacv.Frame;

import org.bytedeco.javacv.Java2DFrameConverter;

import org.bytedeco.javacv.OpenCVFrameConverter;

import org.bytedeco.javacv.OpenCVFrameGrabber;





public class CameraUtil{

private static CamerThread camerThread = null ;

    public static void main(String[] args) throws Exception, InterruptedException{

    Camera("E:\\test\\2.jpg", 700, 700);

     

    }

    /*

     *  outFile 存储地址  列如 E:\\test\\2.jpg

     *  width   height 窗口大小  自己设置一下

     */

    public static void Camera(String outFile,int width ,int height) {

   

        OpenCVFrameGrabber grabber = new OpenCVFrameGrabber(0);

         grabber.setImageWidth(width);  

         grabber.setImageHeight(height); 



         CanvasFrame canvas = new CanvasFrame("摄像头");//新建一个窗口

         canvas.setAlwaysOnTop(true);

         canvas.setLayout(null);

         Font font= new Font("微软雅黑", Font.BOLD, 30);

         JButton jButton = new JButton("确认上传");

         JButton jButton1 = new JButton("继续拍照");

         jButton1.setEnabled(false);

         JButton jButton2 = new JButton("关闭");

         jButton.setFont(font);

         jButton1.setFont(font);

         jButton2.setFont(font);

         jButton.setBounds(30, 550, 200, 100);

         jButton1.setBounds(260, 550, 200, 100);

         jButton2.setBounds(480, 550,200, 100);

         canvas.add(jButton);

         canvas.add(jButton1);

         canvas.add(jButton2);

         

         jButton.addActionListener(new ActionListener() {

  @Override

  public void actionPerformed(ActionEvent e) {

  if(camerThread!=null) {

  camerThread.terminate();

  }

           jButton1.setEnabled(true);

  }

  });

         

         jButton1.addActionListener(new ActionListener() {

          @Override

          public void actionPerformed(ActionEvent e) {

          jButton1.setEnabled(false);

          camerThread = new CamerThread(height, height, canvas, grabber, outFile);

                camerThread.start();

                

         

          }

         });

         jButton2.addActionListener(new ActionListener() {

          @Override

          public void actionPerformed(ActionEvent e) {

          camerThread.terminate();

        //System.exit(0);//退出

        canvas.dispose();

          }

         });

       camerThread = new CamerThread(height, height, canvas, grabber, outFile);

       camerThread.start();

       

    }

 public static void doExecuteFrame(Frame f, String targetFileName) {

     

      if (null ==f ||null ==f.image) {

      return;

      }

      Java2DFrameConverter converter =new Java2DFrameConverter();

      targetFileName=targetFileName.replace("mp4", "jpg");

      System.out.println("targetFileName"+targetFileName);

      String imageMat ="jpg";

      String FileName =targetFileName;

      BufferedImage bi =converter.getBufferedImage(f);

      File output =new File(FileName);

      try {

      ImageIO.write(bi,imageMat,output);

      }catch (IOException e) {

      e.printStackTrace();

      }

     }

}

class CamerThread extends Thread{

// 此变量必须加上volatile

private volatile boolean stop = true;

private int width;

private int height;

private CanvasFrame canvas;

private OpenCVFrameGrabber grabber;

private String  outFile;



public CamerThread(int width, int height, CanvasFrame canvas, OpenCVFrameGrabber grabber, String outFile) {

super();

this.width = width;

this.height = height;

this.canvas = canvas;

this.grabber = grabber;

this.outFile = outFile;

}





@Override

public void run() {

int i=0;

try {

        grabber.start();   //开始获取摄像头数据

while(stop){

if(i<2) {

            canvas.setSize(width, height);

            i++;

           }

canvas.showImage(grabber.grab());

Thread.sleep(100);//50毫秒刷新一次图像

//获取摄像头图像并放到窗口上显示, 这里的Frame frame=grabber.grab(); frame是一帧视频图像

       }

       OpenCVFrameConverter.ToIplImage converter =new OpenCVFrameConverter.ToIplImage();

       IplImage src = null;

       Frame capturedFrame = null;

capturedFrame= grabber.grab();

src =converter.convert(capturedFrame);

capturedFrame =converter.convert(src);

CameraUtil.doExecuteFrame(grabber.grab(),outFile);

grabber.stop();//停止抓取

} catch (org.bytedeco.javacv.FrameGrabber.Exception | InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}







// 线程终止

public void terminate() {

stop = false;

}

}

javacv调用摄像头拍照


打赏
最近浏览
暂无贡献等级
llllzzzzz  LV1 2023年4月25日
abcdefg-111 2023年3月30日
暂无贡献等级
太阳泪  LV6 2022年6月7日
衬衫的价格 2022年4月8日
暂无贡献等级
暂无贡献等级
a1016664736  LV12 2022年2月15日
ilusymon  LV3 2021年9月9日
object-oriented440  LV3 2021年5月22日
iRichard1314  LV6 2021年5月16日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友