一、前言
本來打算下午,進行資料結構學習,但是啃了一上午高數之后,突然不想看書了,就打開電腦學了學設計模式,然后無意間發現OpenCV,于是進行了簡單的學習,
二、介紹
- 什么是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();
}
}
效果:


另外,還可以呼叫攝像頭進行動態捕捉人臉,參考文章如下,參考文章
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282561.html
標籤:AI
上一篇:C++ 簡介
