Mac M1编译OpenCV获取libopencv_java490.dylib文件

Window OpenCV下载地址
https://opencv.org/releases/
OpenCV源码下载
https://github.com/opencv/opencv/tree/4.9.0
https://github.com/opencv/opencv_contrib/tree/4.9.0
OpenCV依赖
brew install libjpeg libpng libtiff cmake3 ant freetype
构建open CV
cmake -G Ninja \-DCMAKE_BUILD_TYPE=Release \-DCMAKE_OSX_ARCHITECTURES="arm64;x86_64" \-DWITH_IPP=OFF \-DWITH_TBB=OFF \-DWITH_OPENCL=OFF \-DENABLE_NEON=OFF \-DCPU_BASELINE="" \-DCPU_DISPATCH="" \-DBUILD_opencv_dnn=OFF \-DBUILD_JAVA=ON \-DPNG_ARM_NEON_OPT=0 \-DBUILD_opencv_imgcodecs=ON \-DBUILD_opencv_ml=OFF \-DBUILD_LIST="core;java" \-DCV_DISABLE_OPTIMIZATION=ON \-DBUILD_opencv_python=OFF \-DOPENCV_EXTRA_MODULES_PATH=/Users/youshang/Downloads/opencv_contrib-4.9.0/modules \-DJAVA_AWT_INCLUDE_PATH=$JAVA_HOME/include \-DJAVA_AWT_LIB=$JAVA_HOME/lib/libjawt.dylib \-DJAVA_INCLUDE_PATH=$JAVA_HOME/include \-DJAVA_INCLUDE_PATH2=$JAVA_HOME/include/darwin \-DJAVA_JVM_LIBRARY=$JAVA_HOME/lib/server/libjvm.dylib \..
  • 注意-DCMAKE_OSX_ARCHITECTURES-DBUILD_LIST参数,仅仅是为了编译成功,里面缺了很多模块
  • 编译出来只能使用本地库,jar功能不全选择maven仓库下载替换
构建完成标志:

在这里插入图片描述

编译opencv
ninja
编译完成标志:

在这里插入图片描述

  • 编译opencv为了获取 libopencv_java490文件
  • 文件存放路径为:opencv-4.9.0/build/lib (不要使用构建成功的jar包,jar包单独下载)
  • libopencv_java490.dylib Mac依赖的 OpenCV本地库
  • opencv_java490.dll window依赖的OpenCV本地库
项目中集成OpenCV
配置libopencv_java490文件
  • libopencv_java490文件丢到 /usr/local/lib 目录下,在项目中加载OpenCV本地库
    static {// 加载 OpenCV 本地库System.loadLibrary(Core.NATIVE_LIBRARY_NAME);}
  • idea添加VM options引用

    -Djava.library.path=/usr/local/lib
    

    在这里插入图片描述

配置openCV jar包
        <dependency><groupId>com</groupId><artifactId>opencv</artifactId><version>4.9.0</version><scope>system</scope><systemPath>${project.basedir}/libs/opencv-4.9.0-0.jar</systemPath></dependency>
异常信息:
no opencv_java490
Exception in thread "main" java.lang.UnsatisfiedLinkError: no opencv_java490 in java.library.path: [/Users/youshang/Library/Java/Extensions, /Library/Java/Extensions, /Network/Library/Java/Extensions, /System/Library/Java/Extensions, /usr/lib/java, .]at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2678)at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:830)at java.base/java.lang.System.loadLibrary(System.java:1890)at com.rangertech.osc.video.utils.CameraCalibrationJava.<clinit>(CameraCalibrationJava.java:26)
  • 原因:未配置libopencv_java490所导致的
  • 解决方法:将libopencv_java490配置到-Djava.library.path= 读取的位置即可
long org.opencv.imgcodecs.Imgcodecs.imread_1(java.lang.String)
Exception in thread "main" java.lang.UnsatisfiedLinkError: 'long org.opencv.imgcodecs.Imgcodecs.imread_1(java.lang.String)'at org.opencv.imgcodecs.Imgcodecs.imread_1(Native Method)at org.opencv.imgcodecs.Imgcodecs.imread(Imgcodecs.java:330)at com.rangertech.osc.video.utils.CameraCalibrationJava.calibration(CameraCalibrationJava.java:83)at com.rangertech.osc.video.utils.CameraCalibrationJava.main(CameraCalibrationJava.java:192)
  • 原因:有可能是jdk架构、libopencv_java490版本、libopencv_java490编译架构,不一致导致的

  • 解决方法:单独下载opencv jar包

    • 下载地址:https://repo1.maven.org/maven2/org/openpnp/opencv/4.9.0-0/

    • 在调用时主动加载OpenCV:

          public static void main(String[] args) {//加载openCVPrintVersion.main(args);CameraCalibrationDTO dto = new CameraCalibrationDTO();dto.setChessboardHeight(6);dto.setChessboardWidth(9);dto.setSquareSize(24.0);dto.setImagePaths(Lists.newArrayList("/Users/youshang/Downloads/Checkerboard.png"));CameraCalibrationJava.calibration(dto);}
      
zsh: command not found:
CMake Error: The source directory "/Users/youshang/Downloads/opencv-4.9.0/build/ " does not exist.
Specify --help for usage, or press the help button on the CMake GUI.
zsh: command not found: -DBUILD_JAVA=ON
  • 原因:
    • CMake 提示找不到 …/opencv-4.9.0/build/ 目录,原因是路径末尾多了一个空格;
    • 终端报 “zsh: command not found: -DBUILD_JAVA=ON” 往往是因为换行符 \ 后面不小心留了空格,导致 shell 没把它当作续行符处理,接下来的参数被当成了新的命令。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/web/82071.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端面试准备-3

1.let、const、var的区别 ①&#xff1a;let和const为块级作用域&#xff0c;var为全局作用域 ②&#xff1a;let和var可以重新赋值定义&#xff0c;而const不可以 ③&#xff1a;var会提升到作用域顶部&#xff0c;但不会初始化&#xff1b;let和const也会提升到作用不顶部…

Java 中 Lock 接口详解:灵活强大的线程同步机制

在 Java 中&#xff0c;Lock 是一个接口&#xff0c;它提供了比 synchronized 关键字更灵活、更强大的线程同步机制。以下将详细介绍 Lock 接口及其实现类&#xff0c;以及它与 synchronized 相比的优点。 Lock 接口及其实现类介绍 Lock 接口 Lock 接口定义了一系列用于获取…

实验分享|基于sCMOS相机科学成像技术的耐高温航空涂层材料损伤检测实验

1实验背景 航空发动机外壳的耐高温涂层材料在长期高温、高压工况下易产生微小损伤与裂纹&#xff0c;可能导致严重安全隐患。传统光学检测手段受限于分辨率与灵敏度&#xff0c;难以捕捉微米级缺陷&#xff0c;且检测效率低下。 某高校航空材料实验室&#xff0c;采用科学相机…

python训练营day40

知识点回顾&#xff1a; 彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中展平操作&#xff1a;除第一个维度batchsize外全部展平dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作业&#xff1a;仔细学习下测试和训练代码…

Baklib企业CMS全流程管控与智能协作

企业CMS全流程管控方案解析 现代企业内容管理中&#xff0c;全流程管控的实现依赖于对生产、审核、发布及迭代环节的系统化整合。通过动态发布引擎与元数据智能标记技术&#xff0c;系统可自动匹配内容与目标场景&#xff0c;实现标准化模板驱动的快速部署。针对多分支机构的复…

Qt程序添加调试输出窗口:CONFIG += console

目录 1.背景 2.解决方案 3.原理详解 4.控制台窗口的行为 5.条件编译&#xff08;仅调试模式显示控制台&#xff09; 6.替代方案 7.总结 1.背景 在Qt程序开发中&#xff0c;开发者经常遇到这样的困扰&#xff1a; 开发机上程序运行正常 发布到其他机器后程序无法启动 …

《江西棒球资讯》棒球运动发展·棒球1号位

联赛体系结构 | League Structure MLB模式 MLB采用分层体系&#xff08;大联盟、小联盟&#xff09;&#xff0c;强调梯队建设和长期发展。 MLB operates a tiered system (Major League, Minor League) with a focus on talent pipelines and long-term development. 中国现…

Python爬虫实战:研究Tornado框架相关技术

1. 引言 1.1 研究背景与意义 网络爬虫作为一种自动获取互联网信息的程序,在信息检索、数据挖掘、舆情分析等领域有着广泛的应用。随着互联网数据量的爆炸式增长,对爬虫的性能和效率提出了更高的要求。传统的同步爬虫在处理大量 URL 时效率低下,而异步爬虫可以显著提高并发…

Vue-列表过滤排序

列表过滤 基础环境 数据 persons: [{ id: "001", name: "刘德华", age: 19 },{ id: "002", name: "马德华", age: 20 },{ id: "003", name: "李小龙", age: 21 },{ id: "004", name: "释小龙&q…

JDK21深度解密 Day 9:响应式编程模型重构

【JDK21深度解密 Day 9】响应式编程模型重构 引言&#xff1a;从Reactor到虚拟线程的范式转变 在JDK21中&#xff0c;虚拟线程的引入彻底改变了传统的异步编程模型。作为"JDK21深度解密"系列的第91天&#xff0c;我们将聚焦于响应式编程模型重构这一关键主题。通过…

UE5打包项目设置Project Settings(打包widows exe安装包)

UE5打包项目Project Settings Edit-Project Settings- Packaging-Ini Section Denylist-Advanced 1&#xff1a;打包 2&#xff1a;高级设置 3&#xff1a;勾选创建压缩包 4&#xff1a;添加要打包地图Map的数量 5&#xff1a;选择要打包的地图Maps 6&#xff1a;Project-Bui…

Fastapi 学习使用

Fastapi 学习使用 Fastapi 可以用来快速搭建 Web 应用来进行接口的搭建。 参考文章&#xff1a;https://blog.csdn.net/liudadaxuexi/article/details/141062582 参考文章&#xff1a;https://blog.csdn.net/jcgeneral/article/details/146505880 参考文章&#xff1a;http…

java helloWord java程序运行机制 用idea创建一个java项目 标识符 关键字 数据类型 字节

HelloWord public class Hello{public static void main(String[] args) {System.out.print("Hello,World!");} }java程序运行机制 用idea创建一个java项目 建立一个空项目 新建一个module 注释 标识符 关键字 标识符注意点 数据类型 public class Demo02 {public st…

随机响应噪声-极大似然估计

一、核心原因&#xff1a;噪声机制的数学可逆性 在随机响应机制&#xff08;Randomized Response&#xff09;中使用极大似然估计&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是为了从扰动后的噪声数据中无偏地还原原始数据的统计特性。随机响应通过已知概率的…

SMT贴片机工艺优化与效率提升策略

内容概要 现代电子制造领域中&#xff0c;SMT贴片机作为核心生产设备&#xff0c;其工艺优化与效率提升直接影响企业竞争力。本文聚焦设备参数校准、吸嘴选型匹配、SPI检测技术三大技术模块&#xff0c;结合生产流程重构与设备维护周期优化两大管理维度&#xff0c;形成系统性…

AI提示工程(Prompt Engineering)高级技巧详解

AI提示工程(Prompt Engineering)高级技巧详解 文章目录 一、基础设计原则二、高级提示策略三、输出控制技术四、工程化实践五、专业框架应用提示工程是与大型语言模型(LLM)高效交互的关键技术,精心设计的提示可以显著提升模型输出的质量和相关性。以下是经过验证的详细提示工…

光电设计大赛智能车激光对抗方案分享:低成本高效备赛攻略

一、赛题核心难点与备赛痛点解析 全国大学生光电设计竞赛的 “智能车激光对抗” 赛题&#xff0c;要求参赛队伍设计具备激光对抗功能的智能小车&#xff0c;需实现光电避障、目标识别、轨迹规划及激光精准打击等核心功能。从历年参赛情况看&#xff0c;选手普遍面临三大挑战&a…

【KWDB 创作者计划】_再热垃圾发电汽轮机仿真与监控系统:KaiwuDB 批量插入10万条数据性能优化实践

再热垃圾发电汽轮机仿真与监控系统&#xff1a;KaiwuDB 批量插入10万条数据性能优化实践 我是一台N25-3.82/390型汽轮机&#xff0c;心脏在5500转/分的轰鸣中跳动。垃圾焚烧炉是我的胃&#xff0c;将人类遗弃的残渣转化为金色蒸汽&#xff0c;沿管道涌入我的胸腔。 清晨&#x…

day23-计算机网络-1

1. 网络简介 1.1. 网络介质 网线&#xff1a;cat5,cat5e 六类网线&#xff0c;七类网线&#xff0c;芭蕾网线光纤&#xff1a;wifi&#xff1a;无线路由器&#xff0c;ap5G 1.2. 常见网线类型 1.2.1. 双绞线&#xff08;Twisted Pair Cable&#xff09;【最常用】 按性能主…

VR/AR 视网膜级显示破局:10000PPI 如何终结颗粒感时代?

一、传统液晶 “纱窗效应”&#xff1a;VR 沉浸体验的最大绊脚石 当用户首次戴上 VR 头显时&#xff0c;眼前密密麻麻的像素网格往往打破沉浸感 —— 这正是传统液晶显示在近眼场景下的致命缺陷。受限于 500-600PPI 的像素密度&#xff0c;即使达到 4K 分辨率&#xff0c;等效到…