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
@Slf4j
public 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使用中常见的问题”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


标题名称:opencv使用中常见的问题
转载来源:http://hbruida.cn/article/pdgccs.html