赞
踩
OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,它提供了丰富的工具和算法,用于处理图像和视频数据。该库由一系列高效的计算机视觉算法组成,涵盖了许多领域,包括目标识别、图像处理、机器学习、三维重建等。
以下是OpenCV的一些关键特点和功能:
使用OpenCV可以在计算机视觉和图像处理项目中加速开发过程。无论是学术研究还是商业应用,OpenCV都提供了丰富的工具和资源,帮助开发者处理图像和视频数据。
其他学习方式:
官网文档地址:https://docs.opencv.org/4.6.0/df/d65/tutorial_table_of_content_introduction.html
教程参考:https://www.w3cschool.cn/opencv/
教程参考:https://www.yiibai.com/opencv/opencv_adding_text.html
1、你可以从OpenCV的GitHub仓库下载Haar级联分类器的XML文件,该文件用于人脸检测。以下是官方的GitHub仓库地址:
https://github.com/opencv/opencv
在该仓库中,Haar级联分类器的XML文件通常位于 data/haarcascades
目录下。具体来说,用于人脸检测的文件是 haarcascade_frontalface_default.xml
。
你可以通过直接访问GitHub页面下载该文件,或者使用Git工具将整个仓库克隆到本地。以下是通过Git克隆仓库的命令:
git clone https://github.com/opencv/opencv.git
然后,你可以在 opencv/data/haarcascades
目录下找到 haarcascade_frontalface_default.xml
文件。
请注意,OpenCV的GitHub仓库可能会有更新,因此你可能需要查看最新的版本。
2、下载地址:https://opencv.org/releases/
下载到本地后,双击进行安装即可
1、安装目录如下:
build :基于window构建
sources:开源,提供源码
2、这里是Java开发关注java目录即可:
x64与x86:代表给不同的系统使用
opencv-452.jar:给java操作openvc的程序包
3、由于是64位系统,所以关注x64目录:
DLL:(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。DLL文件,放置于系统中。当执行某一个程序时,相应的DLL文件就会被调用
这里使用IDEA进行开发,导入opencv-460.jar库,使用快捷键 Ctrl+Shift+Alt+S打开,选择库项,导入Java库:
创建一个maven项目(springboot也行),并引入依赖,在pom.xml
文件中添加:
<!--添加 OpenCV 依赖-->
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.5.1-1</version> <!-- 替换为你所需的 OpenCV 版本 -->
</dependency>
以下是一个简单的Java代码示例,演示如何使用OpenCV进行人脸识别。这个示例使用了OpenCV的Haar级联分类器来检测图像中的人脸。确保你已经将OpenCV的JAR文件添加到你的Java项目中。
import nu.pattern.OpenCV; import org.opencv.core.*; import org.opencv.highgui.HighGui; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; /** * 描述:Java中利用OpenCV进行人脸识别 * * @author 为一道彩虹 */ public class FaceRecognition { public static void main(String[] args) { // 加载 OpenCV 库 OpenCV.loadShared(); // 读取图像 String imagePath = "D://Test/1553247564696949.jpg"; Mat image = Imgcodecs.imread(imagePath); // 加载人脸分类器 String xmlFile = "D://haarcascade_frontalface_alt.xml"; CascadeClassifier faceDetector = new CascadeClassifier(xmlFile); // 人脸检测 MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections); // 绘制人脸框 for (Rect rect : faceDetections.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)); } // 显示结果 HighGui.imshow("Detected Face", image); HighGui.waitKey(); // 释放资源 image.release(); } }
确保替换 imagePath
和 xmlFile
为你实际的图像文件路径和Haar级联分类器的XML文件路径。
原图:
利用 OpenCV
进行人脸检测的结果:
除了上述方式,还可以将opencv-452.jar
安装到本地仓库或私有仓库,然后在pom.xml中引入依赖。
在pom.xml
文件中,通过坐标的形式引入
<!-- 加载lib目录下的opencv包 -->
<dependency>
<groupId>org.opencv</groupId>
<artifactId>opencv</artifactId>
<version>4.5.2</version>
<scope>system</scope>
<systemPath>${basedir}/lib/opencv-460.jar</systemPath>
</dependency>
public class MyTest
{
// 调用OpenCV库文件
static
{
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
}
public static void main(String args[])
{
// 创建一个3X3的对角矩阵
Mat a = Mat.eye(3, 3, CvType.CV_8UC1);
System.out.println(a.dump());
}
}
执行上述代码,不出意外将出现如下异常:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java460 in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1860)
at java.lang.Runtime.loadLibrary0(Runtime.java:871)
at java.lang.System.loadLibrary(System.java:1122)
解决方案有2种:
1.将D:\Java\opencv\build\java\x64\opencv_java452.dll
文件拷贝至下面2个目录,任选其一即可。
2.通过指定虚拟机参数解决:
try { String openCVDllName = "D:\\Java\\opencv\\build\\java\\x64\\opencv_java452.dll"; // 本文使用 openCV4.5.2 System.load(openCVDllName); } catch (SecurityException e) { System.out.println(e.toString()); System.exit(-1); } catch (UnsatisfiedLinkError e) { System.out.println(e.toString()); System.exit(-1); }
以下是一个简单的Java代码示例,演示如何使用OpenCV进行人脸识别。这个示例使用了OpenCV的Haar级联分类器来检测图像中的人脸。确保你已经将OpenCV的JAR文件添加到你的Java项目中。
import org.opencv.core.*; import org.opencv.imgcodecs.Imgcodecs; import org.opencv.imgproc.Imgproc; import org.opencv.objdetect.CascadeClassifier; /** * 描述:描述:Java中利用OpenCV进行人脸识别 * * @author 为一道彩虹 */ public class DetectFaceDemo { public static void detectFace(String imagePath, String outFile) throws Exception { System.out.println("开始人脸检测..."); // 加载人脸分类器 String xmlFile = "D://haarcascade_frontalface_alt.xml"; CascadeClassifier faceDetector = new CascadeClassifier(xmlFile); Mat image = Imgcodecs.imread(imagePath); // 在图片中检测人脸 MatOfRect faceDetections = new MatOfRect(); faceDetector.detectMultiScale(image, faceDetections); System.out.println(String.format("检测到 %s个人脸", faceDetections.toArray().length)); // 绘制人脸框 Rect[] rects = faceDetections.toArray(); if (rects != null && rects.length > 1) { for (Rect rect : rects) { // 在每一个识别出来的人脸周围画出一个方框 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); } } // 存储 Imgcodecs.imwrite(outFile, image); System.out.println(String.format("人脸检测结果,人脸检测图片文件为:%s", outFile)); } public static void main(String[] args) throws Exception { try { String openCVDllName = "D:\\Java\\opencv\\build\\java\\x64\\opencv_java452.dll"; // 本文使用 openCV4.5.2 System.load(openCVDllName); } catch (SecurityException e) { System.out.println(e.toString()); System.exit(-1); } catch (UnsatisfiedLinkError e) { System.out.println(e.toString()); System.exit(-1); } // 人脸测试 String imagePath = "D:\\Test\\1553247564696949.jpg"; detectFace(imagePath, "D:\\face2.png"); } }
利用 OpenCV
进行人脸检测的结果:
在Java中使用OpenCV进行人脸识别通常涉及以下步骤:
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
或者,如果你使用的是OpenCV的Java wrapper,你可以使用:
nu.pattern.OpenCV.loadShared();
Mat
类来加载图像。这是OpenCV中表示图像的数据结构。Mat image = Imgcodecs.imread("path/to/your/image.jpg");
String xmlFile = "path/to/haarcascade_frontalface_default.xml";
CascadeClassifier faceDetector = new CascadeClassifier(xmlFile);
MatOfRect faceDetections = new MatOfRect();
faceDetector.detectMultiScale(image, faceDetections);
for (Rect rect : faceDetections.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));
}
HighGui.imshow("Detected Face", image);
HighGui.waitKey();
image.release();
请注意,以上代码只是一个简单的示例。在实际应用中,你可能需要处理图像的各种情况,例如图像预处理、性能优化等。此外,你还可以使用深度学习模型进行人脸识别,OpenCV也提供了对深度学习模型的支持。
先赞后看,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️
码字不易,大家的支持就是我的坚持下去的动力。点赞后不要忘了关注我哦!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。