赞
踩
提前准备jdk、以及编译工具
版本自己选择,我这里选用的是jdk1.8和opencv3.4.16
官方库
OpenCV - 在 SourceForge.net 浏览文件](OpenCV - Browse Files at SourceForge.net)
选择对应的版本,拿3.4.16举例,点击下载
解压后结构如下
其中builder下的java和x64文件夹下的path需要配置,后面要考!
即java文件夹下的x64文件夹和x64下的vc15\bin
下载完成后打开Idea创建项目,在Project Structure中的Libraries添加jar包
添加路径(直接运行会报错:no opencv_java版本号 in java.library.path)
局部添加(仅仅只是在这个方法内能够使用)
找到VM options选项添加配置如下:
-Djava.library.path=D:\\develop\\java\\opencv\\opencv\\build\\java\\x64 ;D:\\develop\\java\\opencv\\opencv\\build\\x64\\vc15\\bin
具体路径视自己文件夹修改,即上面所说的文件
配置完成后即可复制以下代码测试,输出一些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的基本配置就完成了
位深度:说白了,在计算机底层都是bit存储,1010那样,图片同理根据一个像素占据的位深度对图片也有了划分,黑白图位深度为1,即二值图像;灰度图像位深度为8,即2^8,取值为0-255;现在常见的彩色图像最起码的都是24位深度,即3x8,分别为RGB(红绿蓝)相互组合
文件格式:
TIFF
GIF
PNG
JPEG
BMP
在搭建环境时写过这样的程序,这就是创建矩阵的一种方式;在创建前,先认识一下第三个参数,在后面使用中也尤其重要
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)
使用静态方法
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()
使用构造器
主要的就空参和3个参数,具体ctrl+左键看吧
采用读取图片创建
要注意的是,图片太大直接在控制台很难输出,所以我采用的是读取图片的其中一个像素取值
//读取并展示图片 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);
clone
Mat mat = new Mat(2,3, CvType.CV_8UC1); Mat mat2 = mat.clone();
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。