一梦荼靡 2022-09-05 11:00 采纳率: 0%
浏览 68
已结题

Opencv在main能运行但是在Control下就报错

问题遇到的现象和发生背景
java使用Opencv在main能运行但是在Control下就报错
opencv版本为4.5.4
问题相关代码,请勿粘贴截图

@RequestMapping("Openmv")
    @ResponseBody
    public void Openmv(HttpServletRequest request, HttpServletResponse response)
            throws Exception {
      System.out.println("开始");
//        System.setProperty("spring.devtools.restart.enabled", "false");
//        System.out.println(System.getProperty("java.library.path"));
//        // 加载动态库
//        URL url = ClassLoader.getSystemResource("lib/opencv/opencv_java454.all");
//        System.load(url.getPath());
//        System.out.println(url);
  //      System.load(url1);
    //   System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        System.load("D:\\down\\opencv\\build\\java\\x64\\opencv_java454.dll");
        System.out.println("人脸检测开始……");
        //读取原图像
        Mat image =Imgcodecs.imread("D:\\down\\worklace\\CV\\aaa.jpg");
        //建立灰度图像存储空间
        Mat gray = new Mat(image.rows(), image.cols(), CvType.CV_8UC1);
        //彩色图像灰度化
        Imgproc.cvtColor(image, gray, Imgproc.COLOR_RGB2GRAY);
        //高斯模糊
        Mat gauss = gray.clone();
        Imgproc.GaussianBlur(gray, gauss, new Size(new Point(5, 5)), 0);
        // 函数检测边缘
        Mat canny = gauss.clone();
        Imgproc.Canny(gauss, canny, 100, 200);

        //找到轮廓
        Mat hierarchy = canny.clone();
        List<MatOfPoint> contours = new ArrayList<>();
        Imgproc.findContours(canny, contours, hierarchy, Imgproc.RETR_TREE, Imgproc.CHAIN_APPROX_SIMPLE);

        List<Integer> ints = new ArrayList<>();
        List<MatOfPoint> points = new ArrayList<>();
        //从轮廓的拓扑结构信息中得到有5层以上嵌套的轮廓
        for (int i = 0; i < contours.size(); i++) {
            int k = i;
            int c = 0;
            while (hierarchy.get(0, k)[2] != -1) {
                k = (int) hierarchy.get(0, k)[2];
                c = c + 1;
                if (c >= 5) {
                    ints.add(i);
                    points.add(contours.get(i));
                }
            }
        }
        System.out.println("找到" + ints.size() + "个标志轮廓!");

        Point[] points1 = points.get(0).toArray();
        Point[] points2 = points.get(1).toArray();
        Point[] points3 = points.get(2).toArray();

        Point[] point = new Point[points1.length + points2.length + points3.length];
        System.arraycopy(points1, 0, point, 0, points1.length);
        System.arraycopy(points2, 0, point, points1.length, points2.length);
        System.arraycopy(points3, 0, point, points1.length + points2.length, points3.length);


        //轮廓转换成最小矩形包围盒
        RotatedRect rotatedRect = Imgproc.minAreaRect(new MatOfPoint2f(point));
        //截取出二维码
        Rect qrRect = rotatedRect.boundingRect();
        Mat mat = new Mat(image, qrRect);
        String flag="0";
        //扫描后的图片
        Mat hsv_image = new Mat(mat.size(), mat.type());
        Mat mat2=new Mat(mat.size(), mat.type());
        //将图片的格式转为HSV模式,原来为RGB
        Imgproc.cvtColor(mat, hsv_image, Imgproc.COLOR_BGR2HSV);
        // 色调(H),饱和度(S),明度(V)
        // 下面就可以进行颜色的提取了
        int num=0;
        int num_rows = hsv_image.rows();
        int num_col = hsv_image.cols();
        for (int i = 0; i < num_rows; i++) {
            for (int j = 0; j < num_col; j++) {
                // 获取每个像素
                double[] clone = hsv_image.get(i, j).clone();
                double hun = clone[0]; // HSV hun

                if ((hun>=35&&hun<=77)) {
                    if (clone[1] >= 43 && clone[1] <= 255) {
                        if (clone[2] >= 46 && clone[2] <= 255) {
                            // 红色范围外,全部设置为黑色,
                            /*clone[0] = 0;
                            clone[1] = 0;
                            clone[2] = 255;*/
                            num++;
                            flag="1";
                            //mat2.put(i, j, clone);
                        }
                    }
                }
            }
        }
        if(flag.equals("1")){
            System.out.println("绿码");
        }
        // System.out.println(num);
        //保存图像到Result目录中
        // Imgcodecs.imwrite("D:\\down\\worklace\\opencv\\gray.png",mat2);
        // Imgcodecs.imwrite("D:\\down\\worklace\\opencv\\qrCodeImg.jpg", qrCodeImg);
    }

运行结果及报错内容
Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/opencv/imgcodecs/Imgcodecs
我的解答思路和尝试过的方法
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);报错Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: org/opencv/core/Core
project structure->Libraries->java已配置,Vm option也配置了,没有引用spring-boot-devtools

  • 写回答

1条回答 默认 最新

  • weixin_49433068 2022-09-07 10:04
    关注

    你是不是换了之后没有相应的库文件配置,找不到opencv的库了,要不你直接把用到的库文件复制到项目的资源里面试试

    评论

报告相同问题?

问题事件

  • 系统已结题 9月13日
  • 创建了问题 9月5日

悬赏问题

  • ¥15 代码在keil5里变成了这样怎么办啊,文件图像也变了,
  • ¥20 Ue4.26打包win64bit报错,如何解决?(语言-c++)
  • ¥15 clousx6整点报时指令怎么写
  • ¥30 远程帮我安装软件及库文件
  • ¥15 关于#自动化#的问题:如何通过电脑控制多相机同步拍照或摄影(相机或者摄影模组数量大于60),并将所有采集的照片或视频以一定编码规则存放至规定电脑文件夹内
  • ¥20 深信服vpn-2050这台设备如何配置才能成功联网?
  • ¥15 Arduino的wifi连接,如何关闭低功耗模式?
  • ¥15 Android studio 无法定位adb是什么问题?
  • ¥15 C#连接不上服务器,
  • ¥15 angular项目错误