OpenCV开发:MacOS源码编译opencv,生成支持java、python、c++各版本依赖库

news2024/12/24 0:12:19

OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它为开发者提供了丰富的工具和函数,用于处理图像和视频数据,以及执行各种计算机视觉任务。

以下是 OpenCV 的一些主要特点和功能:

  1. 跨平台性:OpenCV 支持多个操作系统,包括 Windows、Linux、macOS 等,可以在不同平台上运行。

  2. 图像处理:提供了丰富的图像处理功能,包括图像滤波、转换、几何变换、颜色空间转换等。

  3. 特征检测和描述:可以进行关键点检测、特征描述、特征匹配等操作,常用于对象识别、图像配准等任务。

  4. 目标检测和跟踪:提供了各种目标检测和跟踪算法,如 Haar 级联检测器、基于深度学习的物体检测器等。

  5. 机器学习支持:集成了机器学习库,可用于训练和应用分类器、聚类器等模型。

  6. 摄像机标定和运动估计:能够进行摄像机标定,估计摄像机的内部和外部参数,并进行运动估计。

  7. 图像和视频 I/O:支持从多种来源读取图像和视频数据,并提供保存处理结果的功能。

  8. 高效性能:OpenCV 使用优化的 C/C++ 代码实现,性能较高,并提供了 Python、Java 等语言的接口。

OpenCV 通过丰富的文档和示例,使得开发者可以利用其强大的功能进行图像处理、计算机视觉和机器学习应用的开发和研究。它被广泛应用于医疗图像分析、安全监控、自动驾驶、增强现实等领域。

一、下载OpenCV源码创建构建目录

  1. 使用git下载最新版本
git clone https://github.com/opencv/opencv.git
  1. 源码同级创建编译目录
mkdir build
cd build

二、安装构建java opencv库所需资源

# 未安装ant执行如下安装命令,已安装请忽略
brew install ant
# 未安装jdk执行如下安装命令,已安装请忽略
brew install openjdk@17  

三、安装构建python opencv库所需资源

  1. 安装anaconda
brew install anaconda
  1. 添加环境变量
vim ~/.zshrc
  1. 添加如下内容
# Anaconda
export PATH=/opt/homebrew/anaconda3/bin:$PATH
export PATH="$PATH:/opt/homebrew/anaconda3/lib"
  1. 重载环境变量及验证
# 重新加载环境变量
source ~/.zshrc
# 验证conda安装是否成功
conda --v

四、编译opencv

  1. 创建脚本/build/run.sh
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/opencv \
-DBUILD_JAVA=ON \
-DINSTALL_PYTHON_EXAMPLES=ON \
-DCMAKE_BUILD_TYPE=Debug \
-DBUILD_opencv_python3=ON \
-DPYTHON_DEFAULT_EXECUTABLE=/opt/homebrew/anaconda3/bin/python3 \
-DBUILD_EXAMPLES=ON \
../opencv ..

注意:
-DCMAKE_BUILD_TYPE=Debug 编译版本会有更多输出调试信息
-DCMAKE_BUILD_TYPE=Release 正式上线请使用Release

  1. 构建Makefile
cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_EXAMPLES=ON ../opencv
  1. 执行结果
--   Other third-party libraries:
--     Lapack:                      YES (/opt/homebrew/anaconda3/lib/libopenblas.dylib -lm -ldl)
--     Eigen:                       NO
--     Custom HAL:                  YES (carotene (ver 0.0.1))
--     Protobuf:                    build (3.19.1)
--     Flatbuffers:                 builtin/3rdparty (23.5.9)
-- 
--   OpenCL:                        YES (no extra features)
--     Include path:                NO
--     Link libraries:              -framework OpenCL
-- 
--   Python 3:
--     Interpreter:                 /opt/homebrew/anaconda3/bin/python3 (ver 3.11.5)
--     Libraries:                   /opt/homebrew/anaconda3/lib/libpython3.11.dylib (ver 3.11.5)
--     numpy:                       /opt/homebrew/anaconda3/lib/python3.11/site-packages/numpy/core/include (ver 1.24.3)
--     install path:                lib/python3.11/site-packages/cv2/python-3.11
-- 
--   Python (for build):            /opt/homebrew/anaconda3/bin/python3
-- 
--   Java:                          
--     ant:                         /opt/homebrew/bin/ant (ver 1.10.14)
--     Java:                        NO
--     JNI:                         /Users/binzhu/Library/Java/JavaVirtualMachines/openjdk-19.0.2/Contents/Home/include /Users/binzhu/Library/Java/JavaVirtualMachines/openjdk-19.0.2/Contents/Home/include/darwin /Users/binzhu/Library/Java/JavaVirtualMachines/openjdk-19.0.2/Contents/Home/include
--     Java wrappers:               YES (ANT)
--     Java tests:                  YES
-- 
--   Install to:                    /usr/local/opencv
-- -----------------------------------------------------------------
  1. 编译
# -j88设置为cpu核心数即可,影响编译速度,我是用的m1pro是8核,所以设置成8
make -j8
  1. 安装
sudo make install

五、python版opencv测试

  1. 准备链接库
# 1. 仿制so文件
cp /usr/local/opencv/lib/python3.11/site-packages/cv2/python-3.11/cv2.cpython-311-darwin.so /usr/local/opencv/lib/python3.11/site-packages/cv2/python-3.11/cv2.so

# 2. 软链接so文件
ln -s /usr/local/opencv/lib/python3.11/site-packages/cv2/python-3.11/cv2.so /opt/homebrew/anaconda3/lib/cv2.so

# 3. 软链接cv2包
ln -s /usr/local/opencv/lib/python3.11/site-packages/cv2 /opt/homebrew/anaconda3/lib/python3.11/site-packages/cv2
  1. vscode创建python工程

  1. 测试代码test.py
import cv2
print(cv2.__version__)

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

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

相关文章

【JavaWeb学习笔记】11 - WEB工程路径专题

一、工程路径问题 1.引入该问题 通过这几个去访问很麻烦 二、工程路径解决方案 1.相对路径 1.说明:使用相对路径来解决,一 个非常重要的规则:页面所有的相对路径,在默认情况下,都会参考当前浏览器地址栏的路径http:/ /ip:port/工程名/来进…

【教3妹学编程-算法题】找到 Alice 和 Bob 可以相遇的建筑

插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 坚持不懈,越努力越幸运,大家一起学习鸭~~~ 3妹:好冷啊, 冻得瑟瑟发抖啦 2…

ES6 面试题 | 15.精选 ES6 面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

服务端主动给客户端发消息?实战教学:使用Nestjs实现服务端推送SSE

前言 服务端消息推送SSE是常用的服务器消息通信手段,适用于服务器主动给客户端发送消息的场景,例如私信通知,扫描登录等都可以使用SSE实现。SSE的底层原理是客户端与服务端建立 HTTP 长链接。 Nestjs 框架内置了对SSE的支持,本文…

Java实现对图片压缩指定大小。比如1260*945。如果图片尺寸大于,就压缩。小于,就拉伸到指定大小

需求: Java实现对图片压缩指定大小。比如1260*945。如果图片尺寸大于,就压缩。小于,就拉伸到指定大小 代码实现: import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.F…

【深度强化学习】确定性策略梯度算法 DDPG

前面讲到如 REINFORCE,Actor-Critic,TRPO,PPO 等算法,它们都是随机性策略梯度算法(Stochastic policy),在广泛的任务上表现良好,因为这类方法鼓励了算法探索,给出的策略是…

禁毒知识竞赛流程和规则

禁毒知识竞赛是一项全国性竞赛活动。有着深化全国青少年毒品预防教育,巩固学校毒品预防教育成果的重要作用。本文介绍一场禁毒知识竞赛的完整流程和规则,供单位组织此类活动时参考。 1、赛制 第一轮10进6,第二轮6进4,4支队伍决出…

编译android的C版本Lua库

本文讲述如何使用android studio 编译最新版本的Lua开源库),请自行下载。 我们提供的Demo,可以自行下载,工程结构如下: 本文编译的是Lua 5.4.6的版本,编译采用cmake的方式,我们支持编译静态库和动态库(我们在这一讲里:“Lua与***C在Android上的互调”是使用静态库)…

02_Web开发基础之JavaScript

Web开发基础之JavaScript 学习目标和内容 1、能够描述Javascript的作用 2、能够使用分支结构if语句逻辑判断 3、能够使用其中一种循环语句 4、能够定义javaScript中的函数 5、能够定义javaScript中的对象 6、能够描述DOM的作用 7、能够通过DOM操作HTML标签元素及其属性 8、能够…

TrustZone之调试、跟踪和分析

接下来,我们将查看系统中的调试和跟踪组件,如下图所示: 现代Arm系统包括支持调试和性能分析的广泛功能。在TrustZone中,我们必须确保这些功能不能被用来危害系统的安全性。 关于调试功能,考虑开发新的SoC。不同的开发人员被信任调试系统的不同部分。芯片公司的工程…

JRT实现在线打印预览

在JRT打印元素绘制协议一篇已经介绍过打印把绘图和打印逻辑进行了分离,这是和老设计最大的不同。因为老的设计时候没想着做在线预览功能,是后面硬性扩出来的。这次从最初设计就考虑绘图逻辑各处共用,包括打印预览,在线打印预览等、…

Google Scholar引用没有GB/T格式

想选择GB/T 参考文献格式,却无法找到这种引用方式。 1、GB/T 7714:(我国)国家标准的代号由大写汉语拼音字母构成。 强制性国家标准的代号为"GB",推荐性国家标准的代号为"GB/T"。 国家标准的编号由…

C语言学习NO.-操作符(二)二进制相关的操作符,原码、反码、补码是什么,左移右移操作符、按位与,按位或,按位异或,按位取反

一、操作符的分类 操作符的分类 算术操作符&#xff1a; 、- 、* 、/ 、%移位操作符: << >>位操作符: & | ^ 赋值操作符: 、 、 - 、 * 、 / 、% 、<< 、>> 、& 、| 、^单⽬操作符&#xff1a; &#xff01;、、–、&、*、、-、~ 、siz…

基于YOLOv8深度学习的西红柿成熟度检测系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

linux下查看进程资源ulimit

ulimit介绍与使用 ulimit命令用于查看和修改进程的资源限制。下面是ulimit命令的使用方法&#xff1a; 查看当前资源限制&#xff1a; ulimit -a 这将显示当前进程的所有资源限制&#xff0c;包括软限制和硬限制。查看或设置单个资源限制&#xff1a; ulimit -<option> …

2023年【陕西省安全员C证】新版试题及陕西省安全员C证复审模拟考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 陕西省安全员C证新版试题参考答案及陕西省安全员C证考试试题解析是安全生产模拟考试一点通题库老师及陕西省安全员C证操作证已考过的学员汇总&#xff0c;相对有效帮助陕西省安全员C证复审模拟考试学员顺利通过考试。…

C++初阶-stack的使用与模拟实现

stack的使用与模拟实现 一、stack的介绍和使用二、stack的使用三、stack的模拟实现3.1 成员变量3.2 成员函数3.2.1 push入栈3.2.2 pop出栈3.2.3 返回栈顶数据3.2.4 返回栈的大小3.2.5 判断栈是否为空 四、完整代码4.1 stack.h4.2 test.h 一、stack的介绍和使用 1.stack是一种容…

03_Web开发基础之综合应用

web开发基础之综合使用 学习目标和内容 1、能够描述jQuery的作用 2、能够使用jQuery的选择器获取元素 3、能够使用jQuery对HTML标签元素注册事件 4、能够使用jQuery对HTML元素的属性进行操作 5、能够描述Bootstrap的作用 6、能够使用Bootstrap创建简单网页 7、能够描述AJAX的作…

Java----新手一步一步安装 Java 语言开发环境

查看原文 文章目录 一、基于 Windows 10 系统 安装配置 JDK8二、基于 CentOS7 系统安装配置 JDK8 一、基于 Windows 10 系统 安装配置 JDK8 &#xff08;1&#xff09;打开 JDK下载网站&#xff0c;根据系统配置选择版本&#xff0c;这里选择windows 64位的版本&#xff0c;点…

人工智能-A*算法-最优路径搜索实验

上次学会了《A*算法-八数码问题》&#xff0c;初步了解了A*算法的原理&#xff0c;本次再用A*算法完成一个最优路径搜索实验。 一、实验内容 1. 设计自己的启发式函数。 2. 在网格地图中&#xff0c;设计部分障碍物。 3. 实现A*算法&#xff0c;搜索一条最优路径。 二、A*算法实…