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

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__)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Apache Flume(3):数据持久化

1 使用组件 File Channel 2 属性设置 属性名默认值说明type-filecheckpointDir~/.flume/file-channel/checkpoint检查点文件存放路径dataDirs~/.flume/file-channel/data日志存储路径,多个路径使用逗号分隔. 使用不同的磁盘上的多个路径能提高file channel的性能 …

74hc244驱动数码管显示电路及程序

把七或八只发光二极管组合在一个模件上组成了个8字和小数点,用以显示数字。为了减少管脚,把各个发光管的其中同一个极接在一起作为共用点,因此就产生了共阳极和共阴极数码之说。共阳管就是把各个发光管的正极接在一起,而共阴管就刚…

PMI相关证书的获取步骤及注意内容

近几年很多行业的从业人员都在考取PMI项目管理相关证书,可在中国大陆地区参加考试的认证主要有:PMP, PgMP, PMI-RMP, PMI-ACP, PMI-PBA, CAPM。PfMP, PMI-SP尚未在中国大陆地区开放考试。 现整理该类证书的相关获取步骤及注意内容 一、证书获取步骤 S…

SOLIDWORKS编码重命名批量完成原来这么简单

每个公司都有自己的编码规则及命名规则,因此新产品设计完成之后,都需要对新设计的零部件进行重新编码及命名,今天我们来介绍一款提高编码及命名效率的插件—SolidKits.BatchCoding。 SolidKits.BatchCoding批量编码器是对于PDM的SolidKits分…

活动 | Mint Blockchain 将于 2024 年 1 月 10 号启动 MintPass 限时铸造活动

MintPass 是由 Mint Blockchain 官方发行的 Mint 网络和社区的 NFT 通行证,将在 2024 年 1 月份启动限时铸造活动。今天这篇文章会着重向大家介绍即将举办的 MintPass 活动的基础信息。 MintPass 有 2 种类型: 类型 1:Mint Genesis NFT Mint…

栈(C语言版)

一.栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。 进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。 栈中的数据元素遵守 后进先出 LIFO ( Last In First Out )的原则。…

人工智能导论复习资料

题型 1、简答题(5题) 2、设计题 3、综合题 4、论述题(10分) 考点 第一章 1、人工智能的定义、发展; 2、人工智能的学派、认知观及其间的关系; 3、人工智能要素及系统分类; 4、人工智能的研究、…

下午好~ 我的论文【CV边角料】(第三期)

文章目录 CV边角料Pixel ShuffleSENetCBAMGlobal Context Block (GC)Criss-Cross Attention modules (CC) CV边角料 Pixel Shuffle Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network pixelshuffle算法的实现流…

八大排序——快速排序(霍尔 | 挖空 | 前后指针 | 非递归)

我们今天来讲讲八大排序中的快速排序,快速排序最明显的特点就是排序快,时间复杂度是O(N* logN),但是坏处就是如果排序的是一个逆序的数组的时候,时间复杂度是O(N^2),还不用我们的插入…

5.2 Java包装类

5.2 包装类 1. 介绍2. 基本数据类型和包装类之间的转换2.1 装箱2.2 拆箱3. 字符串与包装类相互转换 3. 其他3.1 基本类型初始值3.2 包装类的默认值3.3 包装类对象之间的比较 1. 介绍 2. 基本数据类型和包装类之间的转换 2.1 装箱 基本数据类型转包装类 //装箱:把基…

代码随想录算法训练营第二十四天(回溯算法篇)|理论基础,77. 组合

结束了二叉树的篇章,我们进入到回溯啦! 学习资料:代码随想录 (programmercarl.com) 理论基础 回溯算法又称回溯搜算算法,是一种搜索方法。 作为递归的“副产品”,只要右递归的地方就会有对应的回溯的过程。 回溯算…

Python往事:ElementTree的单引号之谜

最近在针对某款设备的界面xml进行更新过程中,被告知回稿的字串放在了一个excel文件中,而我要上传到服务器的界面用语是用xml文件封装的。再经过详细求证了翻译组提供excel文件的原因后,我决定用python来完成界面用语xml的更新,但是…

【深度学习目标检测】八、基于yolov5的抽烟识别(python,深度学习)

YOLOv5是目标检测领域一种非常优秀的模型,其具有以下几个优势: 1. 高精度:YOLOv5相比于其前身YOLOv4,在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进,如更深的网络结构、更多的特征层和更高分辨率的输入图…

一些关于fMRI脑数据的预处理工具

一些关于fMRI脑数据的预处理工具 前言概述SPM12工具箱FSL工具箱FreeSurfer工具箱BrainNet Viewer工具箱circularGraph工具箱Nipype集成框架fMRIPrep集成框架参考文献 前言 March 25, 2022 这里是关于fMRI脑数据的预处理工具的相关调研 主要是关于数据的预处理,数据…

C语言之冒泡排序

排序&#xff08;sort&#xff09;就是以一定的基准&#xff0c;将数据按照升序&#xff08;从小到大&#xff09;或降序&#xff08;从大到小&#xff09;重新排列。 冒泡排序法 我们用一段程序来演示。 /*读取学生的身高并排序*/ #include<stdio.h>#define NUMBER 5…

HPM6750系列--第十篇 时钟系统

一、目的 上一篇中《HPM6750系列--第九篇 GPIO详解&#xff08;基本操作&#xff09;》我们讲解了HPM6750 GPIO相关内容&#xff0c;再进一步讲解其他外设功能之前&#xff0c;我们有必要先讲解一下时钟系统。 时钟可以说是微控制器系统中的心脏&#xff0c;外设必须依赖时钟才…

独立看门狗 IWDG

看门狗介绍 "看门狗"通常指的是计算机科学和信息技术领域中的一种技术或设备&#xff0c;用于监控系统的运行状态&#xff0c;并在系统出现故障或异常情况时采取相应的措施。这种技术或设备起到类似于守卫的作用&#xff0c;确保系统的稳定性和可靠性。 在计算机系统…

算法通关村第十二关—字符串冲刺题(黄金)

字符串冲刺题 一、最长公共前缀 LeetCode14 编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀&#xff0c;返回空字符串"" 示例1&#xff1a; 输入&#xff1a;strs["flower","fLow","flight"] 输出&#xff1a;&…

【C++学习————引用】

【C学习——————引用】 欢迎阅读新一期的c模块————引用 ✒️个人主页&#xff1a;-Joker- &#x1f3f7;️专栏&#xff1a;C &#x1f4dc;代码仓库&#xff1a;c_code &#x1f339;&#x1f339;欢迎大佬们的阅读和三连关注&#xff0c;顺着评论回访&#x1f339;&a…

Windows10 如何开机自动启动redis

前言 当我们在Windows 10上使用Redis时&#xff0c;通常希望能够使Redis服务在系统启动时自动启动&#xff0c;以便我们无需手动介入就能够方便地访问和管理数据。在这个过程中&#xff0c;我们将通过下载、安装和配置Redis为Windows服务的方式&#xff0c;使其成为系统的一部分…