李振海
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; } }
评论

微信网友_6658860417273856
2023年9月21日
暂无贡献等级
llllzzzzz LV1
2023年4月25日
abcdefg-111
2023年3月30日
暂无贡献等级
太阳泪 LV6
2022年6月7日
衬衫的价格
2022年4月8日
暂无贡献等级
微信网友_5835421126955008
2022年2月16日
暂无贡献等级
a1016664736 LV12
2022年2月15日
ilusymon LV3
2021年9月9日
object-oriented440 LV3
2021年5月22日
iRichard1314 LV6
2021年5月16日