千家信息网

opencv使用中常见的问题

发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,本篇内容主要讲解"opencv使用中常见的问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"opencv使用中常见的问题"吧!最近项目遇到一个问题,spr
千家信息网最后更新 2025年02月03日opencv使用中常见的问题

本篇内容主要讲解"opencv使用中常见的问题",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"opencv使用中常见的问题"吧!

最近项目遇到一个问题,springboot2在打包过程中出现的问题;

1、引用本地的jar包,怎么打包到项目;

pom.xml 配置   dependencies标签配置             org.opencv       opencv       0.0.1       system       ${project.basedir}/src/main/resources/lib/opencv-440.jar         其中,version为必填,尝试过省略,报错;   plugins标签配置          org.apache.maven.plugins       maven-compiler-plugin       3.8.1                  1.8           1.8           UTF-8                                         ${project.basedir}/src/main/resources/lib                               org.springframework.boot       spring-boot-maven-plugin                  true                   resources标签 配置                     ${project.basedir}/src/main/resources                          lib/*.jar                                    ${project.basedir}/src/main/resources                          lib/*.dll                                    ${project.basedir}/src/main/resources                          *.yml                                    ${project.basedir}/src/main/resources                          */*.xml                                    ${project.basedir}/src/main/resources                          */*.json                     

2、opencv使用人脸识别过程中,需要引入haarcascade_frontalface_alt2.xml文件,如果放在项目的lib文件中,在打包的过程中能够打到包里,但是在动态引用的过程中,由于jar包中文件的引用出现混乱路径的情况,找不到文件。找到一个折中的办法,haarcascade_frontalface_alt2.xml文件放到固定目录下,再引用的时候,只需要读取固定的路径即可。

yml文件配置
path:
resourcePath: C:\haarcascade_frontalface_alt2.xml # 人脸识别的xml配置文件

NativeConfig.java类

package com.hake.smart.configration;import com.hake.smart.ymlconfig.YmlConfigUtil;import lombok.extern.slf4j.Slf4j;import org.opencv.core.*;import org.opencv.imgcodecs.Imgcodecs;import org.opencv.imgproc.Imgproc;import org.opencv.objdetect.CascadeClassifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.util.ClassUtils;import javax.annotation.Resource;import java.util.Arrays;/** * @Author: Liu Yue * @Descripition: * @Date; Create in 2020/8/25 15:59 **/@Configuration@Slf4jpublic class NativeConfig {    @Resource    private YmlConfigUtil ymlConfigUtil;    @Value("${path.resourcePath}")    private static String resourcePath;    @Value(value = "${path.resourcePath}")    private void setResourcePath(String  resourcePath){        this.resourcePath = resourcePath ;    }    @Bean    public NativeConfig initFrontalface(){        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);        log.error("路径:{}",resourcePath);        faceDetector = new CascadeClassifier(resourcePath);        return new NativeConfig();    }    /**     * 测试OpenCV是否能运行:需要自行修改图片位置     * @throws Exception 测试是否成功     */    static CascadeClassifier faceDetector;/*    static {        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);        //String url = "C:/hake/gitremote/hakesmartacceptback/target/classes/lib/haarcascade_frontalface_alt2.xml";        //ClassPathResource("lib/haarcascade_frontalface_alt2.xml");        *//*ClassPathResource resource = new ClassPathResource("lib/haarcascade_frontalface_alt2.xml");        String path = resource.getPath();        path = basepath + path;*//*        URL urlClass = ClassLoader.getSystemResource("lib/haarcascade_frontalface_alt2.xml");        String path = urlClass.getPath();        log.error("路径:{}",path);        path = path.substring(1,path.length());        faceDetector = new CascadeClassifier(path);    }*/    private Mat conv_Mat(String img_1) {        Mat image0 = Imgcodecs.imread(img_1);        Mat image = new Mat();        //灰度转换        Imgproc.cvtColor(image0, image, Imgproc.COLOR_BGR2GRAY);        MatOfRect faceDetections = new MatOfRect();        //探测人脸        faceDetector.detectMultiScale(image, faceDetections);        // rect中是人脸图片的范围        for (Rect rect : faceDetections.toArray()) {            //切割rect人脸            Mat mat = new Mat(image, rect);            return mat;        }        return null;    }    //比较图片相似度    public Boolean compare_image(String img_1, String img_2) {        Mat mat_1 = conv_Mat(img_1);        Mat mat_2 = conv_Mat(img_2);        Mat hist_1 = new Mat();        Mat hist_2 = new Mat();        //颜色范围        MatOfFloat ranges = new MatOfFloat(0f, 256f);        //直方图大小, 越大匹配越精确 (越慢)        MatOfInt histSize = new MatOfInt(1000);        Imgproc.calcHist(Arrays.asList(mat_1), new MatOfInt(0), new Mat(), hist_1, histSize, ranges);        Imgproc.calcHist(Arrays.asList(mat_2), new MatOfInt(0), new Mat(), hist_2, histSize, ranges);        // CORREL 相关系数        double res = Imgproc.compareHist(hist_1, hist_2, Imgproc.CV_COMP_CORREL);        log.info("OPENCV人脸相似度:{}",res);        int lifePhotostandard = ymlConfigUtil.getLifePhotostandard();        log.info("相识度标准:{}",lifePhotostandard);        boolean bl = res * 100 > lifePhotostandard ? true:false;        return bl;    }}

到此,相信大家对"opencv使用中常见的问题"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0