OpenCV 安装教程 Mac + Xcode

本文提供了一步步指导,在Mac上安装OpenCV并使用Xcode进行配置的详细教程。包括下载OpenCV,安装CMake,配置Xcode环境,解决CUDA编译问题等步骤。还介绍了如何在C++中使用OpenCV,并提到了不同C++标准库的选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考教程

OpenCV on Mac OSX: A step-by-step guide
HOWTO: Setup XCode 6.1 to work with OpenCV3 libraries

其实这个教程很通用, 在更新版本的opencv和macos上(甚至在ubuntu上) 应该也可以正常安装使用的

1.下载OpenCV

OpenCV官网

2.安装OpenCV

需安装CMake

解压OpenCV源码, 命令行里切换至解压目录

#make a separate directory for building
mkdir build
cd build
#cmake -G "Unix Makefiles" ..

更新:(2016.1.20 OpenCV 3.1.0)
安装opencv_contrib:
下载opencv_contrib放到OpenCV源码文件夹, opencv_contrib要与OpenCV版本一致

cmake -DOPENCV_EXTRA_MODULES_PATH=<opencv_contrib>/modules <opencv_source_directory>

#类似这样:
#contrib路径一定要写对! 否则cmake不成功...
cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.3.1/modules ..

#后面链接库文件的时候加上-lopencv_xfeatures2d

如果需要安装多个版本的opencv,则需要指定install的路径

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lib/opencv_3.3/ ..

这样/usr/local/lib/opencv_3.3 这个路径里面就有includelib文件夹了, 后面设置路径的时候不会冲突,于是就可以在电脑上安装多个opencv啦~

所以最后的命令可能是这样的

cmake -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib-3.3.1/modules -DCMAKE_INSTALL_PREFIX=/usr/local/lib/opencv_3.3/ ..

命令解释
cmake [options] <path-to-source>
-G <generator-name> Specify a build system generator.
选择Unix系统 源文件路径为上层目录
cmake 根据CMakeLists生成Makefile文件

make -j8
sudo make install

命令解释
-jn 意为并行编译
OpenCV将安装到/usr/local/中
make 根据Makefile生成目标文件与可执行文件
lib库就是这个时候编译生成的

请参考
cmake与make

3.XCode环境配置

Build Settings

头文件目录 Header Search Paths
/usr/local/include

库文件目录 Library Search Paths
/usr/local/lib
这里写图片描述

链接库文件 Other Linker Flages
(2017.11.1)
OpenCV 3.3.1 的Fags

-lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_calib3d -lopencv_ccalib -lopencv_core -lopencv_datasets -lopencv_dnn -lopencv_dpm -lopencv_face -lopencv_features2d -lopencv_flann -lopencv_fuzzy -lopencv_highgui -lopencv_img_hash -lopencv_imgcodecs -lopencv_imgproc -lopencv_line_descriptor -lopencv_ml -lopencv_objdetect -lopencv_optflow -lopencv_phase_unwrapping -lopencv_photo -lopencv_plot -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_shape -lopencv_stereo -lopencv_stitching -lopencv_structured_light -lopencv_superres -lopencv_surface_matching -lopencv_text -lopencv_tracking -lopencv_video -lopencv_videoio -lopencv_videostab -lopencv_xfeatures2d -lopencv_ximgproc -lopencv_xobjdetect -lopencv_xphoto

这里写图片描述

4.Hello World

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

int main(int argc, const char * argv[]) {
    cout << "Hello, World!\n";
    Mat im = Mat::ones(200, 200, CV_64FC1);
    imshow("white", im);
    waitKey();
    return 0;
}

会生成200*200的白色图像, 按任意键结束

#include <opencv2/opencv.hpp> 会把OpenCV所有头文件引用进来, 这样写省事, 可避免OpenCV一些调用混淆, 但会编译更多文件; 如果只是需要特定模块, 减少编译, 可引用特定头文件

请参考
stackoverflow讨论

5.Language C++

这里写图片描述

CLANG_CXX_LANGUAGE_STANDARD
Choose a standard or non-standard C++ language dialect.

GNU++11: Accept the ISO C++ 2011 standard with amendments and GNU extensions. [-std=gnu++11]

C + + 11: Accept the ISO C++ 2011 standard with amendments, but not GNU extensions. [-std=c++11]

CLANG_CXX_LIBRARY
Choose a version of the C++ standard library to use.

libstdc++: traditional C++ standard library that works with GCC and the LLVM Compiler (default).

libc++: highly optimized C++ standard library that works only with the LLVM Compiler, and is designed to support new C++11 features.

关于选择libstdc++还是libc++, 得看平台
l i n u x 上用libstdc++, mac上用 libc++.
LLVM编译快, 内存少, 代码质量高, 用户错误提示友好. 神奇的是编译器自动添加漏写的release. 当然与开发了几十年的GNU相比, GNU更完备一些.

个人感觉, 用LLVM写c++, 在不包含libc++的平台上跑可能会报错, 比如oj

请参考
Mac OS X背后的故事-LLVM
stackoverflow讨论
知乎讨论

6.命令行编译运行OpenCV

llvm-g++ -I/usr/local/include -L /usr/local/lib -lopencv_calib3d -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videoio -lopencv_videostab main.cpp -o test
./test

更简单的方法:

llvm-g++ `pkg-config --libs --cflags opencv` main.cpp -o test
./test

pkg-config提供了相应库路径和版本号信息, 可以作为参数直接传给编译器. 比如OpenCV的版本由3.0降到2.4.9, 第一种方法中有些lib库就没有了, 就会报错找不到lib文件; 而pkg-config能够自动记录lib库信息, 所以第二种方法还是可以编译的

请参考
stackoverflow讨论1
stackoverflow讨论2
pkg-config用法


Trouble Shooting

更新:(2017.3.31 OpenCV 3.2)
cuda 7.5, clang 8.0, xcode 8.0
报以下错误
(2017.11.1): 因换硬盘 重装系统后 没有出现这个问题 macOS 10.12.6 (其实不用重装系统, 把硬盘里的内容拷到新硬盘就行, 但我旧硬盘不好了, 总重启 没法拷)

Building NVCC (Device) object
modules/core/CMakeFiles/cuda_compile.dir/src/cuda/cuda_compile_generated_gpu_mat.cu.o
nvcc fatal : The version (‘80000’) of the host compiler (‘Apple clang’) is not supported
CMake Error at cuda_compile_generated_gpu_mat.cu.o.cmake:206 (message):
Error generating cuda_compile_generated_gpu_mat.cu.o

简单粗暴的方法就是不编译用cuda的模块,之前用opencv貌似也没用过cuda的包
关掉所有有关gpu的模块:

cmake -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D BUILD_opencv_gpu=OFF -D BUILD_opencv_gpuarithm=OFF -D BUILD_opencv_gpubgsegm=OFF -D BUILD_opencv_gpucodec=OFF -D BUILD_opencv_gpufeatures2d=OFF -D BUILD_opencv_gpufilters=OFF -D BUILD_opencv_gpuimgproc=OFF -D BUILD_opencv_gpulegacy=OFF -D BUILD_opencv_gpuoptflow=OFF -D BUILD_opencv_gpustereo=OFF -D BUILD_opencv_gpuwarping=OFF ..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值