参考教程
OpenCV on Mac OSX: A step-by-step guide
HOWTO: Setup XCode 6.1 to work with OpenCV3 libraries
其实这个教程很通用, 在更新版本的opencv和macos上(甚至在ubuntu上) 应该也可以正常安装使用的
1.下载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
这个路径里面就有include
和lib
文件夹了, 后面设置路径的时候不会冲突,于是就可以在电脑上安装多个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
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库信息, 所以第二种方法还是可以编译的
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 ..