使用OpenCV Java创建Windows摄像头扫码程序

OpenCV提供了一些基本的Webcam控制接口。用OpenCV C/C++或者Python,可以在任意平台快速创建一个摄像头预览应用。然而使用Java,情况就复杂的多,因为OpenCV Java并没有提供一个类似于imshow的窗口显示接口。想要创建一个带界面的应用,就需要通过OpenCV接口获取数据,并转换成对应的格式,然后通过Java的UI组件显示出来。

OpenCV Java安装

在OpenCV官网下载最新的Windows安装包

安装后找到目录opencv-4.3\opencv\build\java

如果用Eclipse,可以直接导入工程。如果用Maven,需要先安装到Maven的本地仓库:

mvn install:install-file -Dfile=opencv-430.jar -DgroupId=org -DartifactId=opencv -Dversion=4.3.0 -Dpackaging=jar

然后在pom.xml文件里添加依赖:

<dependency>
  <groupId>org</groupId>
  <artifactId>opencv</artifactId>
  <version>4.3.0</version>
</dependency>

还有一个问题就是dll文件怎么加载。如果找不到,会看到错误信息:

Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java430 in java.library.path
        at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1867)
        at java.lang.Runtime.loadLibrary0(Runtime.java:870)
        at java.lang.System.loadLibrary(System.java:1122)
        at com.java.barcode.App.main(App.java:65)

解决方法有几种:

  1. 查看系统中的Java库加载路径。把dll文件放到对应的路径下即可:

    System.out.println(System.getProperty("java.library.path"));
    
  2. 使用全路径加载:

    System.load("D:/opencv-4.3/opencv/build/java/x64/opencv_java430.dll");
    
  3. 启动程序的时候指定dll路径:

    java -Djava.library.path=<dll path> -cp target/opencv-dotcode-1.0-SNAPSHOT-jar-with-dependencies.jar com.java.barcode.App
    

摄像头视频窗口

在OpenCV Java的文档中提供了一份基于JavaFX的示例代码

参考逻辑之后,也可以把代码移植到Java Swing中。我这里用JLable来显示视频帧:

public void updateViewer(final BufferedImage image) {
   
        if (!SwingUtilities.isEventDispatchThread()) {
   
            SwingUtilities.invokeLater(new Runnable() {
   
                @Override
                public void run() {
   
                    mImage.setIcon(new ImageIcon(image));
                }
            });
            return;
        }
    }
 
Runnable frameGrabber = new Runnable() {
   
 
                    @Override
                    public void run() {
   
                        Mat frame = grabFrame();
                        byte[] data = Utils.matToByteArray(frame);
 
                        if (!status.get()) {
   
                            status.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值