用Java+OpenCV学习计算机视觉_jbrcv-CSDN博客

用Java+OpenCV学习计算机视觉

用Java+OpenCV学习计算机视觉

本学期的计算机视觉课程,本人打算使用Java+OpenCV来进行完成(因为对C++不是那么熟悉,但是Java下的OpenCV教程比较少,如果无法完成就使用C++进行完成)

HelloCV程序的编写

下载OpenCV,导入jar包,放置dll文件

OpenCV官网: https://opencv.org/releases/.现在已经更新到4.2.0版本了,那就下载最新版本就可以了,由于下载速度较慢,而且不是所有的文件都需要,所以我把需要的文件和代码都放在github上面了,(dll和jar文件我另外放在微云上面吧,从github下载也比较慢)。

具体是需要下面这两个文件:
在这里插入图片描述
其中我们要把第一个dll文件放到我们的jdk的bin目录文件夹下,如我的jdk目录是D:\Java\jdk-11.0.5,就把这个dll文件放在jdk的bin文件夹里面。

如果是高版本的IDEA,会默认使用Jetbrains自带的JDK,目录是你的IDEA的安装目录的jbr目录就是自带的JDK目录了,如我的是:D:\IntelliJ IDEA 2019.3.3\jbr,我们把刚才的dll文件复制到这个目录下面的bin文件夹里面就可以了。

第二个jar文件就从IDEA导入就可以了。
下面我们来测试我们的环境是否正常。

测试代码

由于我们的Java内要绘制图像最常用的就是使用JFrame,但是这个无法绘制我们的OpenCV的Mat对象,所以我们可以使用其官方的转换函数:HighGui.toBufferedImage(mat);就可以实现Mat到Java的Image对象了。
测试代码如下:
(由于这个比较常用,所以可以写到一个工具类-CvUtils类里面,方便日后进行调用,也方便后续的增加其他工具函数)

/**
  * 将OpenCV的mat类型转化为Java的Buffer额度Image类型
  * @param matrix opencv的mat
  * @return 转化后的BufferedImage
  */
 public static BufferedImage Mat2BufImg(Mat matrix) {
     return (BufferedImage) HighGui.toBufferedImage(matrix);
 }

测试代码:

package HelloCV;

import CVUtils.CvUtils;
import org.opencv.core.Core;
import org.opencv.core.Mat;

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;

import static org.opencv.imgcodecs.Imgcodecs.imread;

public class HelloCV {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        EventQueue.invokeLater(() -> {
            JFrame frame = new HelloCVFrame("Data/Lina.jpg");
            frame.setVisible(true);
        });
    }
}

class HelloCVFrame extends JFrame {
    BufferedImage bufferedImage;

    public HelloCVFrame(String picPath) throws HeadlessException {
        Mat mat = imread(picPath);
        bufferedImage = CvUtils.Mat2BufImg(mat);
        setSize(bufferedImage.getWidth(), bufferedImage.getHeight() + 30);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        repaint();
    }

    @Override
    public void paint(Graphics g) {
        super.paint(g);
        g.drawImage(bufferedImage, 0, 30, null);
    }
}

运行结果:一张标准的Lina图像
在这里插入图片描述
github链接: https://github.com/MyLovePoppet/CV
微云链接:https://share.weiyun.com/5cBECGX

下一篇:灰度直方图及其均衡化

https://blog.csdn.net/qq_41723475/article/details/105324200


原网址: 访问
创建于: 2024-01-05 11:43:21
目录: default
标签: 无

请先后发表评论
  • 最新评论
  • 总共0条评论