当前位置:   article > 正文

Java调用OpenCV(含简单人脸识别和图像灰度处理的示例)_java opencv

java opencv

一、前言

本来打算下午,进行数据结构学习,但是啃了一上午高数之后,突然不想看书了,就打开电脑学了学设计模式,然后无意间发现OpenCV,于是进行了简单的学习。

二、介绍

  1. 什么是OpenCV

OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。 [1] 它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
OpenCV用C++语言编写,它具有C ++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令, 如今也提供对于C#、Ch、Ruby,GO的支持。

主要应用:人脸识别,文字识别(识别车牌号),图像处理,视频处理等

2.Java使用OpenCV的步骤

参考:springboot引入OpenCV

(1) 下载OpenCv包
下载地址
下载之后进行执行安装。得到如下的安装包;
在这里插入图片描述
(2)创建一个maven项目(springboot也行),并引入依赖。并将ddl动态加载库和jar包放入resources里面,
在这里插入图片描述
在这里插入图片描述
(3)测试

package learn.opencv;

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 LYF
 * @DATE 2021/5/2
 * @VERSION 1.0
 * @DESC
 */

public class SimpleTest {
    // 灰度处理
    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("lib/opencv/opencv_java452.dll");
        System.load(url.getPath());
        // 读取图像

        Mat image = imread("E:\\IdeaProjects\\java-base\\src\\main\\resources\\test.png");
        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("E:\\IdeaProjects\\java-base\\src\\main\\resources\\hello.jpg", grayImage);
//        waitKey();



        Mat faceImag = imread("E:\\IdeaProjects\\java-base\\src\\main\\resources\\images\\face\\face1.jpg");
        // 人脸识别器
        CascadeClassifier faceDetector = new CascadeClassifier("D:\\OpenCV\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_alt.xml");
        // 在图片中检测人脸
        MatOfRect faceDetections = new MatOfRect();
        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();
    }
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72

效果:
在这里插入图片描述
在这里插入图片描述
另外,还可以调用摄像头进行动态捕捉人脸。参考文章如下。参考文章

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/650510
推荐阅读
相关标签
  

闽ICP备14008679号