java使用idea添加opencv,人脸检测样例以及无法访问问题

成品

在这里插入图片描述

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();
    }
}

猜你喜欢

转载自blog.csdn.net/m0_54765221/article/details/128603922