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

news/2024/11/20 11:45:48/

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.ppmy.cn/news/1273505.html

相关文章

【Hadoop】HDFS设计思想

HDFS设计思想为什么HDFS上的块为什么远远大与传统文件系统? HDFS设计思想 首先需要明确HDFS部署在集群之上。 假设有一个50G的文件,在HDFS中分布式的存储这个文件,首先需要将50G文件分成多个数据块,块的大小可以设置,…

Text mining and natural language processing in construction 论文阅读

摘要 文本挖掘 ™ 和自然语言处理 (NLP) 引起了建筑领域的兴趣,因为它们提供了管理和分析基于文本的信息的增强功能。这凸显了需要从施工管理的角度进行系统审查,以确定现状、差距和未来方向。通过将 205 份出版物的目标与施工管理实践中概述的具体领域…

使用Verdaccio搭建私有npm仓库

搭建团队的私有仓库,保证团队组件的安全维护和私密性,是进阶前端开发主管路上,必不可少的一项技能。 一、原理 我们平时使用npm publish进行发布时,上传的仓库默认地址是npm,通过Verdaccio工具在本地新建一个仓库地址…

C#数据结构

C#数据结构 常见结构 1、集合 2、线性结构 3、树形结构 4、图形结构 Array/ArrayList/List 特点:内存上连续存储,节约空间,可以索引访问,读取快,增删慢 using System; namespace ArrayApplication {class MyAr…

java内置的数据结构

Java语言提供了许多内置的数据结构,包括: 1. 数组(Array):数组是最基本的数据结构之一,它是一个有序的元素集合,每个元素都有一个对应的索引。在Java中,数组可以通过声明和初始化来创…

基于多智能体系统一致性算法的电力系统分布式经济调度策略MATLAB程序

微❤关注“电气仔推送”获得资料(专享优惠) 参考文献: 主要内容: 应用多智能体系统中的一致性算法,以发电机组的增量成本和柔性负荷的增量效益作为一致性变量,设计一种用于电力系统经济调度的算法&#x…

深入理解——快速排序

目录 💡基本思想 💡基本框架 💡分割方法 ⭐Hoare版本 ⭐挖坑法 ⭐前后指针法 💡优化方法 ⭐三数取中法 ⭐小区间内使用插入排序 💡非递归实现快速排序 💡性能分析 💡基本思想 任取待排…

Netty网络基础的通俗理解(网络操作系统)

写在前面 说来惭愧,最近半年没怎么学习技术,时间基本都花在工作以及去熟悉了解金融领域的知识去了。从大一到现在,我一直有个持续学习技术的习惯,如果太久没学习技术,我心里就开始有点焦虑或者说不充实,所…