【OpenCV】在MacOS上源码编译OpenCV

在MacOS上源码编译OpenCV

  • 1. 下载项目源码
  • 2. 创建CMake编译文件
  • 3. 编译安装
  • 4. 案例测试
  • 5. 总结

 前言

在做视觉任务时,我们经常会用到开源视觉库OpenCV,OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,它具有C++,Python,Java和MATLAB接口,并支持Windows,Linux,Android和Mac OS。
最近在项目中,我遇到了在MacOS上使用OpenCV需求,目前OpenCV官网上并没有提供OpenCV现成的安装包,因此在此处我们需要自己进行编译,所以在此处我们将结合opencv_4.8.0opencv_contril_4.8.0,演示如何源码编译并使用

1. 下载项目源码

  首先下载项目源码,这里我们下载的是4.8.0,大家可以根据自己的需求进行下载,不过要尽量保证opencvopencv_contril源码版本一致。通过下面代码我们进行源码下载:

wget https://github.com/opencv/opencv/archive/4.8.0.zip
wget https://github.com/opencv/opencv_contrib/archive/refs/tags/4.8.0.zip

  下载完代码后,将代码文件解压到当前文件中,如下图所示:
在这里插入图片描述

2. 创建CMake编译文件

  OpenCV支持CMake编译,所以此处需要安装CMake,安装方式此处不做讲解。输入一下指令,打开并创建编译文件夹:

cd opencv-4.8.0
mkdir build && cd build

  接下来输入CMake指令,进行CMake编译,此处需要注意三个路径:

  • CMAKE_INSTALL_PREFIX=<install path><install path>表示编译好的OpenCV安装路径,可以指定到系统路径,也可以是自定义路径,此处设置为:/Users/ygj/3lib/opencv_4.8.0/include/opencv4/opencv2,注意这个路径,后续编译C++项目时会用到。
  • OPENCV_EXTRA_MODULES_PATH=<model path><model path>表示扩展模块的路径,就是上文我们下载的opencv_contril_4.8.0文件,在此处设置为/Users/ygj/3lib/opencv_build/opencv_contrib-4.8.0/modules
  • PYTHON3_EXECUTABLE=<python path><python path>表示本计算机Python的安装路径,此处也可以不设置,主要就是设置要不要生成Python依赖库。如果设置了,需要开启BUILD_opencv_python2=ON或者BUILD_opencv_python3=ON,具体按照你的电脑中安装的Python版本决定。
    设定好上面三个路径后,就可以在终端输入以下指令,进行CMake编译:
cmake -DCMAKE_SYSTEM_PROCESSOR=arm64 -DCMAKE_OSX_ARCHITECTURES=arm64 -DWITH_OPENJPEG=OFF -DWITH_IPP=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=<install path> -D OPENCV_EXTRA_MODULES_PATH=<model path> -D PYTHON3_EXECUTABLE=<python path> -D BUILD_opencv_python2=OFF -D BUILD_opencv_python3=ON -D INSTALL_PYTHON_EXAMPLES=ON -D INSTALL_C_EXAMPLES=OFF -D OPENCV_ENABLE_NONFREE=ON -D BUILD_EXAMPLES=ON ..

在这里插入图片描述

  编译完成后如下图所示,不过此处要注意一点,在编译时会下载相关的第三方库,要保证网络通畅,防止下载失败。

在这里插入图片描述

3. 编译安装

  上一步完成CMake编译后,就可以进行make编译了,只需要输入一下指令即可,-j8表示用8个核心进行编译,具体设置可以根据你的电脑进行设置,数值越大编译越快。

make -j8

  编译完成后,如下图所示:

在这里插入图片描述

  接下来就是进行安装,只需要一下指令就可:

make install

  安装完成后,会在你上文设置的安装路径下生成依赖文件,如下图所示:
在这里插入图片描述

4. 案例测试

  首先创建一个新的C++文件main.cpp文件,在文件中添加以下代码:

#include "opencv2/opencv.hpp"int main(){std::cout<<"hello opencv!"<<std::endl;cv::Mat image = cv::imread("image.jpg");if (!image.empty()){std::cout << "image is OK!" << std::endl;}std::cout << "图像的宽度是:" << image.rows << std::endl;std::cout << "图像的高度是:" <<image.cols << std::endl;std::cout << "图像的通道数是:" << image.channels() << std::endl;cv::Mat image1;cv::cvtColor(image,image1,cv::COLOR_RGB2GRAY);cv::imshow("image",image);cv::imshow("image1",image1);cv::waitKey(0);std::cout<<"hello opencv!"<<std::endl;return 0;
}

  这一段代码主要是读取本地图片文件,获取并输出图片的基本信息,然后使用窗口将图片展示出来。

  此处编译方式采用CMake编译方进行编译,定义的CMakeLists.txt文件如下所示:

cmake_minimum_required(VERSION 3.28)
project(opencv)
set(OpenCV_DIR /Users/ygj/3lib/opencv_4.8.0/lib/cmake/opencv4)
find_package(OpenCV REQUIRED)
message(STATUS "OpenCV_DIR = ${OpenCV_DIR}")
message(STATUS "OpenCV_INCLUDE_DIRS = ${OpenCV_INCLUDE_DIRS}")
message(STATUS "OpenCV_LIBS = ${OpenCV_LIBS}")
include_directories(${OpenCV_INCLUDE_DIRS}
)
add_executable( main main.cpp )
target_link_libraries( main ${OpenCV_LIBS} )

  在CMakeLists文件中,我们通过find_package(OpenCV REQUIRED)查找本计算机安装的OpenCV依赖库,但是需要在之前指定OpenCV的安装路径。写完Cmake文件后,在命令行中输入cmake .进行运行,输出结果如下图所示:

在这里插入图片描述

  可以看出,CMake已经成功找到了本计算机安装的OpenCV路径,并获取了项目编译所需要的所有信息。
如果CMake没有任何问题,接下来就进行项目编译,只需要输入make指令即可,输出如下所示:
在这里插入图片描述

make之后,会在项目文件夹中生成一个main文件,接下来直接运行该文件,斌可以的到如下图所示的输出:

在这里插入图片描述

5. 总结

  在本项目中,我们实现了在MacOS系统上源码编译OpenCV,并在VS Code上使用OpenCV做了项目测试,最后成功实现了在MacOS系统上使用我们源码编译OpenCV的链接库,进行了图片处理。

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

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

相关文章

js中函数动态调用

文章目录 一、场景二、方法2.1、动态函数2.2、eval()函数 三、最后 一、场景 在JS开发中&#xff0c;例如有些场景下&#xff0c;后端要求一个功能要请求不同的接口&#xff0c;但是传参及后续逻辑其实都是一样的&#xff0c;有些同学可能会想到在接口url处统一处理就好&#…

在 docker 容器中配置双网卡,解决通讯的问题

目录 1. 查看当前网络信息 2. 创建自定义网络 3. 查看网卡信息 4. 建立双网卡模式 5. 查看容器的网络 6. 从双网卡中删除默认网卡 已经创建好了的 Docker 容器&#xff0c;要修改它的IP比较麻烦&#xff0c;网上找了几种不同的方法&#xff0c;经过试验都没有成功&…

HeyGen怎么使用想使用高级功能如何订阅

HeyGen是一款AI视频工具&#xff0c;可以让用户轻松地用不同语言说话。 HeyGen是一个用于生成“虚拟化身&#xff08;数字人&#xff09;”视频的工具。 根据其官网的介绍&#xff0c;HeyGen可以通过文本生成视频&#xff0c;有不同的视频模板&#xff0c;可以定制化人物形象、…

Android Studio报错:connect refused

报错信息 解决办法&#xff1a;在System settings里取消代理&#xff0c;将HTTP Proxy设置为 No proxy 但是我发现我的还不行&#xff0c;还是报错&#xff0c;还是connect refused&#xff1a; 我发现虽然在System settings里已经取消代理&#xff0c;但实际项目运行时还是走…

鸿蒙原生应用/元服务开发-Serverless账户验证码的问题

在应用/元服务早期使用过程中&#xff0c;-Serverless账户验证码的格式是[AGC][应用/元服务名称]&#xff0c;如下图。 但是&#xff0c;在最近&#xff0c;[应用/元服务]名称直接变成了【default】,用户收到这种验证码后&#xff0c;心里存有疑虑的&#xff0c;这是哪里配置…

OSG-渲染状态、纹理映射(一)

1、渲染状态 OSG 支持绝大部分的OpenGL固定功能管道(fixed function pipeline)渲染,如Alpha检验、Blending融合剪切平面、颜色蒙板、面选(face culling)深度和模板检验、雾效、点和线的光栅化(rasterization)等。OSG 的渲染状态也允许应用程序指定顶点着色(vertex shader)和片段…

墙裂分享的免费好用api接口

企业工商三要素核验 API&#xff1a;通过输入企业名称、法人、注册号 /组织机构代码 /统一社会信用代码&#xff0c;验证三者是否匹配一致。企业工商四要素核验&#xff1a;传入企业名称、社会统一信用代码、法人名称、法人身份证&#xff0c;校验此四项是否一致。空气质量查询…

Python 数据库(一):使用 mysql-connector-python 操作 MySQL 数据库

大家好&#xff0c;我是水滴~~ 当涉及到使用 Python 操作 MySQL 数据库时&#xff0c;mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能&#xff0c;使您能够执行各种数据库操作&#xff0c;如连接数据库、执行查询和插入数据等。在本文…

【业务中台-上线总结篇】

上线总结篇&#xff1a;从项目切换、问题处理、项目总结、项目验收环节展开 一、项目切换&#xff1a; 在上一章我们提到有制定详细规划的切换计划&#xff0c;在实际切换过程中&#xff0c;我们也是严格按照既定时间节点进行。然而&#xff0c;及时再详情的计划&#xff0c;也…

R语言——R函数、选项参数、数学统计函数(六)

目录 一、R函数 二、选项参数 三、数学统计函数 四、参考 一、R函数 1.lm() lm()是R语言中经常用到的函数&#xff0c;用来拟合回归模型。它是拟合线性模型最基本的函数 lm()格式如下&#xff1a; fit<-lm(formula,data) 其中&#xff0c;formula指要拟合的模型形式…

draw流程图工具导入云原生(CNCF)相关控件

目录 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 2、引用自己的资源链接&#xff1a; 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 导入资源图库&#xff0c;资源放在下方&#xff0c;大家可以下载&#xff1a; 2、引用自己的资源链接&#xff1a;…

Vue实现JSON字符串格式化编辑器组件

相信很多同学都用过网上的在线JSON格式化工具来将杂乱的JSON数据转换成易于我们阅读和编辑的格式。那么&#xff0c;你有没有想过自己动手实现一个这样的工具呢&#xff1f;今天&#xff0c;我将介绍如何使用Vue.js来构建一个简单的JSON格式化工具。 功能简述 支持格式化JSON字…

Linux使用yum命令安装postgrepsql

1.检查安装源 yum search postgresql 2.安装 yum install postgresql-server 3.启动数据库 service postgresql start 4.查看启动状态 service postgresql status 5.登陆测试 su - postgrep psql \l6.远程连接 6.1修改配置文件 在pg_hba.conf增加host all all 0.0.0…

解决Android AAPT: error: resource android:attr/lStar not found. 问题

错误信息 /xxx/gjc/.gradle/caches/transforms-2/files-2.1/930c42acd29d295ce5bc495c3b84423e/core-1.9.0/res/values/values.xml:104:5-113:25: AAPT: error: resource android:attr/lStar not found. not found 资源位置 场景 原Android studio中的项目都是在git上面拉的老项…

linux大于2TB磁盘分区方法

linux大于2TB磁盘分区方法 通过parted命令进行分区。步骤如下&#xff1a; 查询要挂的有磁盘路径, 输入 parted -l 。 进入parted对/dev/vdb盘的交互方式&#xff1a;输入&#xff1a; parted /dev/vdb&#xff0c;再输入&#xff1a;print 查看磁盘信息。 修改磁盘格式为gp…

数据结构与算法python版本之线性结构之队列Quene

什么是队列&#xff1f; 队列是一种有次序的数据集合&#xff0c;其特征是&#xff1a;新数据项的添加总发生在一端&#xff08;通常称为“尾rear”端&#xff09;&#xff0c;而现存数据项的移除总发生在另一端&#xff08;通常称为“首front”端&#xff09;&#xff1b;当数…

详解静态网页数据获取以及浏览器数据和网络数据交互流程-Python

目录 前言 一、静态网页数据 二、网址通讯流程 1.DNS查询 2.建立连接 3.发送HTTP请求 4.服务器处理请求 5.服务器响应 6.渲染页面 7.页面交互 三、URL/POST/GET 1.URL 2.GET 形式 3.POST 形式 四.获取静态网页数据 1.requests库 点关注&#xff0c;防走丢&am…

粘接PI膜除了使用PI膜专用UV胶粘接,还可以使用热固化环氧胶来解决!

热固化环氧胶也是粘接聚酰亚胺&#xff08;PI&#xff09;膜的一种常见方法。 热固化环氧胶是一种在加热的条件下固化成坚固状态的胶水&#xff0c;在涂抹或涂覆胶水后&#xff0c;通过加热&#xff0c;胶水中的化学反应被触发&#xff0c;导致其硬化和固化&#xff0c;从而形…

C#语法进阶 Lambda

Lambda lambda:匿名方法 演变过程&#xff1a; 版本一&#xff1a; 首先创建一个委托&#xff1a; 创建委托需要调用的方法 调用 版本二&#xff1a;匿名方法 没有名字的方法&#xff0c;前面加一个delegate 这样写的话 可以访问局部变量 调用结果&#xff1a; 版本…

跑腿配送系统技术探析

概述 跑腿配送系统是一种基于现代科技的服务平台&#xff0c;通过智能化的技术手段&#xff0c;实现用户需求的快速响应和高效配送。本文将探讨该系统的核心技术原理&#xff0c;以及在实际开发中的一些代码示例。 技术原理 1. 用户请求与任务分配 跑腿配送系统的第一步是…