前言

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

【OpenCV】在MacOS上源码编译OpenCV的更多相关文章

  1. windows 10 上源码编译OpenCV并支持CUDA | compile opencv with CUDA support on windows 10

    本文首发于个人博客https://kezunlin.me/post/6580691f/,欢迎阅读! compile opencv with CUDA support on windows 10 Ser ...

  2. 记一次在mac上源码编译curl,使其支持NSS的过程

    一.背景 在一次学习https原理的过程中,希望客户端指定特定的cipher suites来抓包分析SSL/TLS的握手过程,就想到了使用curl工具,而不是使用浏览器. 接下来使用man curl找 ...

  3. CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境

    CentOS 7上源码编译安装和配置LNMP Web+phpMyAdmin服务器环境 什么是LNMP? LNMP(别名LEMP)是指由Linux, Nginx, MySQL/MariaDB, PHP/ ...

  4. win10 vs2015源码编译opencv、opencv_contrib、Tesseract

    1.软件包准备 opencv源码包地址:                官网  github opencv_contrib源码包地址:   github Tesseract源码包地址:        ...

  5. ubuntu上源码编译安装mysql5.7.27

    一.查看操作系统环境和目录结构,并创建mysql用户和组,以及规划安装mysql所需要的目录. #cat /etc/issue 查看发行版本信息: #cat  /proc/version 查看正在运行 ...

  6. ubuntu 16.04源码编译OpenCV教程 | compile opencv on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/15f5c3e8/,欢迎阅读! compile opencv on ubuntu 16.04 Series Part 1: comp ...

  7. debian 7上源码编译MongoDB 3.4版本

    此文已由作者温正湖授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 要想精通一个数据库,除了知道该数据库的功能特性.使用方法等,还需要能够看懂数据库源码,能够使用gdb工具对其 ...

  8. Ubuntu 16.04上源码编译和安装pytorch教程,并编写C++ Demo CMakeLists.txt | tutorial to compile and use pytorch on ubuntu 16.04

    本文首发于个人博客https://kezunlin.me/post/54e7a3d8/,欢迎阅读最新内容! tutorial to compile and use pytorch on ubuntu ...

  9. linux上源码编译安装mysql-5.6.28

    在 linux 上编译安装 mysql-.tar.gz http://www.mysql.com/ mysql下载地址: http://www.mysql.com/downloads/mysql/#d ...

  10. ubuntu 14.04上源码编译安装php7

    wget https://downloads.php.net/~ab/php-7.0.0alpha2.tar.bz2 //用winscp把下载好的文件上传到网站中 tar jxf php-7.0.0a ...

随机推荐

  1. Linux服务器使用Redis作为数据缓存,并用log4j2进行日志记录

    前言 个人网站使用Vue作为前端,SpringBoot作为后端,MySQL作为数据库,但前端每次请求都会从MySQL数据库中读取数据,而MySQL数据库的数据是存储于服务器磁盘中,所以响应速度有一定影 ...

  2. 【爬虫笔记】Python爬虫简单运用爬取代理IP

    一.前言 近些年来,网络上的爬虫越来越多,很多网站都针对爬虫进行了限制,封禁了一些不规则的请求.为了实现正常的网络爬虫任务,爬虫常用代理IP来隐藏自己的真实IP,避免被服务器封禁.本文将介绍如何使用P ...

  3. 一文带你实现云上部署轻量化定制表单Docker

    本文分享自华为云社区 <[华为云云耀云服务器L实例评测|云原生]自定制轻量化表单Docker快速部署云耀云服务器 | 玩转华为云>,作者:计算机魔术师. 华为云的云耀云服务器L实例备受推崇 ...

  4. 如何使用Java创建数据透视表并导出为PDF

    摘要:本文由葡萄城技术团队原创并首发.转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 前言 数据透视分析是一种强大的工具,可以帮助我们从大量数据中提取有用信 ...

  5. 临时表、视图与系统函数_Lab2

    MySQL数据库操作 Lab1.md body { font-family: var(--vscode-markdown-font-family, -apple-system, BlinkMacSys ...

  6. CSS 还原拉斯维加斯球数字动画

    我的小册 <CSS 技术揭秘与实战通关>上线了,想了解更多有趣.进阶.系统化的 CSS 内容,可以猛击 - LINK. 最近大家刷抖音,是否有刷到拉斯维加斯的新地标 「Sphere」: 场 ...

  7. js下IE和FF的一些兼容写法总结

    一.脚本差异: 1.事件绑定:addEventListener 与 attachEvent  事件处理函数中this指向不同, IE中指向window 2.获取事件对象 :事件处理函数     win ...

  8. FWT & FMT(位运算卷积)学习笔记

    它们两个的全名叫 快速沃尔什变换(FWT) 和 快速莫比乌斯变换(FMT),用来在 \(O(n\log n)\) 时间复杂度内求位运算卷积. 因为 FMT 能解决的问题是 FWT 的子集,所以这里不讲 ...

  9. 9.17 多校联测 Day3 总结

    全程罚坐场. 模拟赛考试状态持续低迷,为明天的状态感到深深担忧. <题目并不难,请喧哗的同学不要大声 AK>,离谱. 不保证按难度顺序排序,尝试改变策略.开始第 1h 将四道题通读一遍并做 ...

  10. 【日常收支账本】【Day05】编辑账本界面增加删除、更新记录功能——提高代码复用性

    一.项目地址 https://github.com/LinFeng-BingYi/DailyAccountBook 二.新增 1. 增加删除记录功能 1.1 功能详述 点击删除按钮后,获取对应行的数据 ...