首页 > 编程语言 >Mac 配置 OpenCV C++ 版本

Mac 配置 OpenCV C++ 版本

时间:2023-05-17 17:57:06浏览次数:42  
标签:git cmake opencv C++ cd OpenCV Mac install

今天紀錄一下如何在 Mac 上安裝 OpenCV for C++ 開發環境

使用 Brew 安装,pkgconfig 检测,2023.5.17

Mac x86 ( Intel ) , Mac M1 ( Apple silicon ) 和 Ubuntu 也適用
此筆記用 OpenCV 4.7.0_4 版本做範例

1. 安装 cmake 与 pkg-config

如果您的 Mac 沒有 cmake, pkg-config 請先使用 brew 安裝 ( brew 官網 )

brew install cmake pkg-config

如果您是 Ubuntu 使用者參考以下指令

sudo apt-get update  
sudo apt-get install -y cmake build-essential git pkg-config

後面步驟不管是 MacOS / Ubuntu 都是相同

2. 由 OpenCV 官方 GitHub clone Source Code

( 官方 github : https://github.com/opencv/ )

選一個你會放置 OpenCV 程式的資料夾位置
然後 clone OpenCV source code

以下用 4.5.4 為例 :

cd 某个文件夹下
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git

另外很多功能是在 opencv_contrib 這 Repository 中, 建議一起安裝 ( 上 2 行 )

3. Checkout 成 4.5.4 版

cd opencv && git checkout 4.5.4  
cd ../  
cd opencv_contrib && git checkout 4.5.4  
cd ../

4. 建立 build folder

mkdir build_opencv_4.5.4

然後記得進入該資料夾 ( 感謝網友修正 )

cd ./build_opencv_4.5.4

5. 使用 cmake

cmake CMAKE_BUILD_TYPE=Release \  
  -DBUILD_EXAMPLES=ON \  
  -DOPENCV_GENERATE_PKGCONFIG=ON \  
  -DCMAKE_INSTALL_PREFIX=/usr/local/ \  
  -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules \  
  ../opencv

6. Make install

make -j12  
make install

此部分和安裝其他軟體差不多,編譯上會花一點時間

Ubuntu 使用者 :
視情況可能需要 sudo 指令 ,例如以下錯誤

-- Install configuration: "Release"  
CMake Error at cmake_install.cmake:41 (file):  
  file cannot create directory: /usr/local/share/licenses/opencv4.  
  Maybe need administrative privileges.

改用使用 sudo make install 應可解決

7. 測試

可以到 opencv 的官方範例檔案中進行編譯測試例如以下指令 :

cd ../opencv/samples/cpp  
g++ -std=c++14 -ggdb opencv_version.cpp -o /tmp/opencv_version `pkg-config --cflags --libs opencv4`

編譯 C++ 通過就可以執行程式看看:

/tmp/opencv_version

OpenCV 範例程式執行成功

Brew 安装

brew install opencv
pkg-config --cflags --libs opencv

CLion里面去配置 创建一个新项目,修改cmakeLists

cmake_minimum_required(VERSION 3.25)  
project(demo)  
  
set(CMAKE_CXX_STANDARD 17)  
  
find_package(OpenCV REQUIRED)  
  
include_directories(${OpenCV_INCLUDE_DIRS})  
  
  
add_executable(demo main.cpp)  
target_link_libraries(demo ${OpenCV_LIBS})

代码测试

#include <iostream>  
#include <opencv2/opencv.hpp>  
#include <string>  
  
using namespace cv;  
using namespace std;  
  
void ImageHold(string str) {  
	Mat image = imread(str);  
	  
	imshow("test_opencv", image);  
	waitKey(0);  
}  
  
int main() {  
	std::cout << "Hello, World!" << std::endl;  
	string path = "/Users/koshkaaaa/Documents/File/Fav/";  
	string str = "6F23E4AF-A2BC-4E2E-958E-C24C3F1AEF0E_1_105_c.jpeg";  
	ImageHold(path + str);  
	return 0;  
}

以上為簡單 OpenCV C++ 安裝筆記

标签:git,cmake,opencv,C++,cd,OpenCV,Mac,install
From: https://www.cnblogs.com/RioTian/p/17409555.html

相关文章

  • 在Linux/Windows/Mac上刷新DNS缓存的方法
    在Linux/Windows/Mac上刷新DNS缓存的方法刷新dns缓存让你可以得到新的域名解析。当你无法正确访问一个新注册的域名时就可以刷新dns缓存试试。但是不同的系统,Windows、MacOS和Linux上的方法是不一样的。1.Windows系统刷新DNS缓存开始-->运行-->输入cmd并回车在打开的命......
  • C++进阶学习(三)constexpr关键字、值类别与decltype关键字、lambda表达式
    五、constexpr说明符constexpr说明符声明该变量或函数在编译期进行求值,从而适用于需要编译器常量表达式的地方在变量声明constexpr时,对象或非静态成员函数蕴含const,函数或静态成员变量蕴含inlineconstexpr变量必须立刻被初始化constexprinta=5;//a=6;/*error*/......
  • C++
    复数类的运算#include<iostream>usingnamespacestd;classComplex{public:Complex(doubler=0,doublei=0):real(r),imag(i){}friendComplexoperator+(Complexc1,Complexc2)//重载双目运算符'+'{Complexc3;......
  • MAC的U盘在windows下格式化
    MAC的U盘在windows下格式化1.进入命令提示符2.输入Diskpart 进入磁盘管理3.listdisk 显示所有的磁盘4.selectdisk2(2为刚刚list出来U盘序号)5.输入clean6.然后就可以正常格式化了.如果还是不行.进入磁盘管理.先分区.再格式化......
  • opencvsharp surf 图像拼接
    代码如下:1Matsrc1=Cv2.ImRead(@"C:\Users\sa\Pictures\SavedPictures\3.png");2Matsrc2=Cv2.ImRead(@"C:\Users\sa\Pictures\SavedPictures\4.png");3Cv2.ImShow("src1",src1);......
  • c++unique
    #include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>usingnamespacestd;intn,a[5211314],len;intmain(){ cin>>n; for(inti=1;i<=n;++i){ cin>>a[i]......
  • linux下查看局域网内所有存活主机和MAC进址
    linux下查看局域网内所有存活主机和MAC进址安装nmap软件yuminstallnmap-y1.常用,探测网络上的存活主机,可以简单判断主机的类型nmap-sP192.168.1.0/24nmap-sP172.27.20.0/242.常用,探测指定网络上的存活主机及其开放的端口nmap-sS192.168.1.0/24nmap-PU192.168.1.......
  • C++ 智能指针
    在介绍智能指针之前,先来看原始指针的一些不便之处:它的声明不能指示所指到底是单个对象还是数组。它的声明没有告诉你用完后是否应该销毁它,即指针是否拥有所指之物。如果你决定你应该销毁指针所指对象,没人告诉你该用delete还是其他析构机制(比如将指针传给专门的销毁函数)......
  • C++用代码验证“一切函数皆可傅里叶”
    #include<stdio.h>#include<math.h>#definepi3.1415926#definerows3#definecolums5typedefstruct{floatre;//reallyfloatim;//imaginary}complex,*pcomplex;complexcomplexadd(complexa,complexb)//复数加{comple......
  • c++ gdiplus实现屏幕截图
    #include<windows.h>#include<gdiplus.h>#include<iostream>#include<filesystem>#include<chrono>#include<iomanip>#include<sstream>#pragmacomment(lib,"Gdiplus.lib")usingnamespaceGdiplus;U......