成品
1 首先是下载opencv。
方法一官网
是直接从官网下链接: link链接
需要在那个平台安装就下那个
方法二百度网盘
有人专门下载最新的opencv 放到网盘中,具体的自己搜,我也不引流了
2安装
解压后,是一个exe文件
然后就选一个地方放相关文件
3测试
<dependencies>
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv</artifactId>
<scope>system</scope>
<systemPath>${
basedir}/src/main/resources/opencv/opencv-470.jar</systemPath>
<version>470</version>
</dependency>
</dependencies>
3.5启动报错
原因
jdk版本不对报错
换个高版本的jdk
4示例 图片灰阶 打印 保存
package com;
import java.awt.*;
import java.awt.Point;
import java.net.URL;
import org.opencv.core.*;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import static org.opencv.highgui.HighGui.imshow;
import static org.opencv.highgui.HighGui.waitKey;
import static org.opencv.imgcodecs.Imgcodecs.imread;
import static org.opencv.imgcodecs.Imgcodecs.imwrite;
import static org.opencv.imgproc.Imgproc.COLOR_RGB2GRAY;
import static org.opencv.imgproc.Imgproc.cvtColor;
/**
* @author Myli
* @create 2023-01-08 17:58
*/
public class main {
public static void main(String[]args) throws Exception {
// 解决awt报错问题
System.setProperty("java.awt.headless", "false");
System.out.println(System.getProperty("java.library.path"));
// 加载动态库
URL url = ClassLoader.getSystemResource("opencv/opencv_java470.dll");
System.load(url.getPath());
// 读取图像
Mat image = imread("C:\\Users\\Sterman\\Desktop\\1667021800600.jpg");
//判断图片是否存在
if (image.empty()) {
throw new Exception("image is empty");
}
//原始图片准备打印
imshow("Original Image", image);
// 创建输出单通道图像
Mat grayImage = new Mat(image.rows(), image.cols(), CvType.CV_8SC1);
// 进行图像色彩空间转换
cvtColor(image, grayImage, COLOR_RGB2GRAY);
//灰阶图片准备打印
imshow("Processed Image", grayImage);
//保存
// imwrite("C:\\Users\\Sterman\\Desktop\\1667021800600.png", grayImage);//
//打印
waitKey();
5示例 图片识别人脸·
package com;
import java.awt.*;
import java.awt.Point;
import java.net.URL;
import org.opencv.core.*;
import org.opencv.imgproc.Imgproc;
import org.opencv.objdetect.CascadeClassifier;
import static org.opencv.highgui.HighGui.imshow;
import static org.opencv.highgui.HighGui.waitKey;
import static org.opencv.imgcodecs.Imgcodecs.imread;
import static org.opencv.imgcodecs.Imgcodecs.imwrite;
import static org.opencv.imgproc.Imgproc.COLOR_RGB2GRAY;
import static org.opencv.imgproc.Imgproc.cvtColor;
/**
* @author Myli
* @create 2023-01-08 18:00
*/
public class main {
public static void main(String[]args) throws Exception {
// 解决awt报错问题
System.setProperty("java.awt.headless", "false");
System.out.println(System.getProperty("java.library.path"));
// 加载动态库
URL url = ClassLoader.getSystemResource("opencv/opencv_java470.dll");
System.load(url.getPath());
Mat faceImag = imread("C:\\Users\\Sterman\\Desktop\\01.jpg");
// 人脸识别器 调用用OpenCV提供好的人脸分类模型 人脸训练模型
CascadeClassifier faceDetector = new CascadeClassifier("D:\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
// 存放人脸矩形
MatOfRect faceDetections = new MatOfRect();
//执行人脸检测 detectMultiScale有多个重载方法——即定义相同的方法名,参数不同,可以对图片进行多种不同方式的操作
faceDetector.detectMultiScale(faceImag,faceDetections);
//画框
Rect[] rects = faceDetections.toArray();
if(rects != null && rects.length >= 1){
for (Rect rect : rects) {
//单独框出人脸
Imgproc.rectangle(faceImag,rect,Scalar.all(1));
//可单独框出其他
}
}
//人脸检测图片
imshow("人脸检测图片",faceImag);
//打印
waitKey();
}
}