java使用opencv

Opencv安装配置

环境准备

  1. 提前准备jdk、以及编译工具

  2. 版本自己选择,我这里选用的是jdk1.8和opencv3.4.16

安装

  1. 官方库

    OpenCV - 在 SourceForge.net 浏览文件](OpenCV - Browse Files at SourceForge.net)

  2. 选择对应的版本,拿3.4.16举例,点击下载

  3. 解压后结构如下

    其中builder下的java和x64文件夹下的path需要配置,后面要考!

    即java文件夹下的x64文件夹和x64下的vc15\bin

  4. 下载完成后打开Idea创建项目,在Project Structure中的Libraries添加jar包

  5. 添加路径(直接运行会报错:no opencv_java版本号 in java.library.path)

    1. 局部添加(仅仅只是在这个方法内能够使用)

      找到VM options选项添加配置如下:

      -Djava.library.path=D:\\develop\\java\\opencv\\opencv\\build\\java\\x64
          ;D:\\develop\\java\\opencv\\opencv\\build\\x64\\vc15\\bin
      

      具体路径视自己文件夹修改,即上面所说的文件

    2. 配置完成后即可复制以下代码测试,输出一些opencv的内容

      import org.opencv.core.Core;
      import org.opencv.core.CvType;
      import org.opencv.core.Mat;
      import org.opencv.core.Scalar;
      
      public class OpencvTest1 {
          static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}
          public static void main(String[] args) {
              System.out.println("Welcome to OpenCV " + Core.VERSION);
              Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0));
              System.out.println("OpenCV Mat: " + m);
              Mat mr1 = m.row(1);
              mr1.setTo(new Scalar(1));
              Mat mc5 = m.col(5);
              mc5.setTo(new Scalar(5));
              System.out.println("OpenCV Mat data:\n" + m.dump());
          }
      }

      输出以下内容即成功,到此opencv的基本配置就完成了

图像处理

数据类型(Mat)

前置概念
  • 位深度:说白了,在计算机底层都是bit存储,1010那样,图片同理根据一个像素占据的位深度对图片也有了划分,黑白图位深度为1,即二值图像;灰度图像位深度为8,即2^8,取值为0-255;现在常见的彩色图像最起码的都是24位深度,即3x8,分别为RGB(红绿蓝)相互组合

  • 文件格式:

    1. TIFF

    2. GIF

    3. PNG

    4. JPEG

    5. BMP

Mat基本使用
认识Mat
  • 在搭建环境时写过这样的程序,这就是创建矩阵的一种方式;在创建前,先认识一下第三个参数,在后面使用中也尤其重要

    new Mat(3,3,CvType.CV_8UC1)
  • 第三个参数表示矩阵的数据类型,就跟java中的什么int、long、string一样;

    • CV:表示OpenCV

    • 第一个字符(8):表示二进制位数,例如java中的int在底层占32位,后面也会使用到

    • 第二个字符(U):表示无符号整形,还有另外2个S和F,分别表示有符号整形和浮点类型

    • 第三个字符(C):通道的简写,表示通道,Channel,其中一个通道等同一个矩阵

    • 第四个字符(1):表示通道个数

  • 在使用OpenCV前都必须加载用户库,如下

    System.loadLibrary(Core.NATIVE_LIBRARY_NAME)
创建矩阵(4)
  1. 使用静态方法

    • zeros:全0矩阵

    • ones:全1矩阵

    • eye:行和列相同时为1矩阵(多通道时只有第一个像素为1)

    //zeros
    Mat zeros = Mat.zeros(2, 3, CvType.CV_8UC1);
    System.out.println("全0矩阵:"+zeros.dump());
    //ones
    Mat ones = Mat.ones(2, 3, CvType.CV_8UC1);
    System.out.println("全1矩阵" + ones.dump());
    Mat ones1 = Mat.ones(3, 3, CvType.CV_8UC3);
    System.out.println(ones1.dump());
    //eye
    Mat eye = Mat.eye(2, 3, CvType.CV_8UC1);
    System.out.println(eye.dump()
  2. 使用构造器

    主要的就空参和3个参数,具体ctrl+左键看吧

  3. 采用读取图片创建

    • 要注意的是,图片太大直接在控制台很难输出,所以我采用的是读取图片的其中一个像素取值

    //读取并展示图片
    Mat mat = Imgcodecs.imread("src/main/resources/img/test.png");
    HighGui.imshow("str",mat);
    HighGui.waitKey(0);
    ​
    BufferedImage bufferedImage = new BufferedImage(mat.width(), mat.height(), BufferedImage.TYPE_3BYTE_BGR);
    int i = mat.get(1, 1, ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData());
    System.out.println(i);
  4. clone

    Mat mat = new Mat(2,3, CvType.CV_8UC1);
    Mat mat2 = mat.clone();
矩阵常用方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值