文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何用Java+OpenCV实现拍照功能

2023-06-26 04:03

关注

本篇内容主要讲解“如何用Java+OpenCV实现拍照功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用Java+OpenCV实现拍照功能”吧!

依赖jar包:只有一个OpenCv的jar包,可以直接从官网上下载

如何用Java+OpenCV实现拍照功能

下面上代码

import java.awt.Graphics;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.awt.image.BufferedImage;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.WindowConstants;import org.opencv.core.Core;import org.opencv.core.Mat;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;import org.opencv.videoio.VideoCapture;import org.opencv.videoio.Videoio;public class CaptureBasic extends JPanel {undefined    private static BufferedImage mImg;    private static VideoCapture capture;    private static  Mat capImg;    private BufferedImage mat2BI(Mat mat){undefined        int dataSize =mat.cols()*mat.rows()*(int)mat.elemSize();        byte[] data=new byte[dataSize];        mat.get(0, 0,data);        int type=mat.channels()==1?                BufferedImage.TYPE_BYTE_GRAY:BufferedImage.TYPE_3BYTE_BGR;        if(type==BufferedImage.TYPE_3BYTE_BGR){undefined            for(int i=0;i<dataSize;i+=3){undefined                byte blue=data[i+0];                data[i+0]=data[i+2];                data[i+2]=blue;            }        }        BufferedImage image=new BufferedImage(mat.cols(),mat.rows(),type);        image.getRaster().setDataElements(0, 0, mat.cols(), mat.rows(), data);        return image;    }    public void paintComponent(Graphics g){undefined        if(mImg!=null){undefined            g.drawImage(mImg, 0, 0, mImg.getWidth(),mImg.getHeight(),this);        }    }    public static void main(String[] args) {undefined        try{undefined            System.loadLibrary(Core.NATIVE_LIBRARY_NAME);            capImg=new Mat();            capture =new VideoCapture(0);           // capture.open(0);            int height = (int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT);            int width = (int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH);            if(height==0||width==0){undefined                throw new Exception("camera not found!");            }            JFrame frame=new JFrame("camera");            frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);            CaptureBasic panel=new CaptureBasic();            panel.addMouseListener(new MouseAdapter() {undefined                @Override                public void mouseClicked(MouseEvent arg0) {undefined                     System.out.println("click");                     saveImg();                }                @Override                public void mouseMoved(MouseEvent arg0) {undefined                    System.out.println("move");                }                @Override                public void mouseReleased(MouseEvent arg0) {undefined                    System.out.println("mouseReleased");                }                @Override                public void mousePressed(MouseEvent arg0) {undefined                    System.out.println("mousePressed");                }                @Override                public void mouseExited(MouseEvent arg0) {undefined                    System.out.println("mouseExited");                    //System.out.println(arg0.toString());                }                @Override                public void mouseDragged(MouseEvent arg0) {undefined                    System.out.println("mouseDragged");                    //System.out.println(arg0.toString());                }});            frame.setContentPane(panel);            frame.setVisible(true);            frame.setSize(width+frame.getInsets().left+frame.getInsets().right,                    height+frame.getInsets().top+frame.getInsets().bottom);            int n=0;            Mat temp=new Mat();            while(frame.isShowing()&& n<5){undefined                System.out.println("第"+n+"张");                capture.read(capImg);                Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_BGRA2BGR);                              // Imgcodecs.imwrite("C:/HWKJ/opencv/"+n+".png", temp); //自动保存                              // panel.mImg=panel.mat2BI(detectFace(capImg));                               panel.mImg=panel.mat2BI(capImg);                panel.repaint();               // n++;                //break;            }            capture.release();           // frame.dispose();        }catch(Exception e){undefined            System.out.println("例外:" + e);        }finally{undefined            System.out.println("--done--");        }    }        //点击面板    public static void saveImg(){undefined        Mat temp=new Mat();        int height = (int)capture.get(Videoio.CAP_PROP_FRAME_HEIGHT);        int width = (int)capture.get(Videoio.CAP_PROP_FRAME_WIDTH);        capture.read(capImg);        Imgproc.cvtColor(capImg, temp, Imgproc.COLOR_BGRA2BGR);        Imgcodecs.imwrite("C:/HWKJ/opencv/aaa.png", temp);        System.out.println("保存图片");    }}

如何用Java+OpenCV实现拍照功能

点击在对应目录下生成的照片

如何用Java+OpenCV实现拍照功能

到此,相信大家对“如何用Java+OpenCV实现拍照功能”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯