java使用opencv
一、windows安装opencv
下载地址:https://opencv.org/releases/
下载后安装
本人安装目录
目录说明:
- build:基于windows构建
- java:开发关注
- x64、x86对应windows操作系统位数
- java:开发关注
- sources:开源源码
二、java使用opencv
1.项目中导入jar
- 打开项目结构
- 选择安装目录下的jar包
三、人脸识别demo
1.demo展示
import org.opencv.core.*;
import org.opencv.highgui.HighGui;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;public class Test {public static void main(String[] args) {imageFaceDetection();}/*** 人脸检测*/public static void imageFaceDetection() {System.loadLibrary(Core.NATIVE_LIBRARY_NAME);// 从配置文件lbpcascade_frontalface.xml中创建一个人脸识别器,文件位于opencv安装目录中CascadeClassifier faceDetector = new CascadeClassifier("D:\\dev\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");// 读取测试图片String imgPath = "C:\\Users\\Administrator\\Desktop\\img\\111.jpg";Mat image = Imgcodecs.imread(imgPath);HighGui.imshow("获取图片", image);HighGui.waitKey(0);if (image.empty()) {throw new RuntimeException("图片内存为空");}// 检测脸部MatOfRect face = new MatOfRect();// 检测图像中的人脸faceDetector.detectMultiScale(image, face);// 匹配Rect矩阵Rect[] rects = face.toArray();System.out.println("识别人脸个数: " + rects.length);// 识别图片中的所以人脸并分别保存int i = 1;for (Rect rect : face.toArray()) {Imgproc.rectangle(image, new Point(rect.x, rect.y), new Point(rect.x + rect.width, rect.y + rect.height), new Scalar(0, 255, 0), 3);// 进行图片裁剪imageCut(imgPath, "D:\\user\\" + i + ".jpg", rect.x, rect.y, rect.width, rect.height);i++;}// 图片中人脸画框保存到本地Imgcodecs.imwrite("D:\\user\\test1.png", image);// 展示图片HighGui.imshow("人脸识别", image);HighGui.waitKey(0);}/*** 裁剪人脸** @param readPath 读取文件路径* @param outPath 写出文件路径* @param x 坐标X* @param y 坐标Y* @param width 截图宽度* @param height 截图长度*/public static void imageCut(String readPath, String outPath, int x, int y, int width, int height) {// 原始图像Mat image = Imgcodecs.imread(readPath);// 截取的区域Rect rect = new Rect(x, y, width, height);// Mat sub = new Mat(image,rect);Mat sub = image.submat(rect);Mat mat = new Mat();Size size = new Size(width, height);// 人脸进行截图并保存Imgproc.resize(sub, mat, size);Imgcodecs.imwrite(outPath, mat);}
}
2.报错分析
错误信息
Exception in thread “main” java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path
需要把安装目录下面的dll文件扔到jdk的bin目录下面
再次运行,正常执行
后面继续再研究