1. opencv是什么?
opencv是一个基于BSD开源协议的图像处理开源库,截止本人编辑时间:2017年6月1日,最新版本为3.2.0。
2.哪里可以得到opencv的源码以及不同平台的动态库?
opencv的官方地址为http://opencv.org/,可以在这里找到opencv的源码以及其他资源。
http://opencv.org/releases.html里面列出了所有可用版本。
当然,如果觉得英文看起来太累,可以访问opencv中文网。
3.如何编译和安装opencv?
opencv目前分为两个版本系列:opencv2.4.x和opencv3.x。
简单点说,opencv3.x是一个阉割后的版本(当然,官方的说法是把原来的C变得更加C++化了),大多数你能搜到的API都是opencv2.4.x系列的,这些API在opencv3.x往往是不支持的,而且opencv3.x把重要的nonfree模块去掉了。nonfree是什么?后面会提到。
你会不会在想,我直接下载编译opencv2.4.x就行了?如果你的MacOS已经升级到了Sierra(10.12.x),那么我只能告诉你:不行,你编译不了了。
Mac Sierra把QTKit库更名成了AVKit库。说实话,如果不是被编译opencv2.4.x折磨到,我都没听说过这两个玩意。当然,如果你喜欢折腾自己的系统,非要编译opencv2.4.x,你大可以找一个老系统的QTKit库,复制到你的系统库里面去,但我不建议这么做。
那么选择编译opencv3.x的朋友,继续往下看吧。
这是opencv-3.2.0的源码目录结构
打开终端,cd到opencv-3.2.0目录,新建一个release目录,并cd到release目录(注意这里的颜色),敲入:cmake -G "Unix Makefiles"..(注意这两个点不要弄丢)
系统找不到cmake?点这里
接着敲:make,开始编译,接下来你可以切出去干点别的,等个半个小时到一个小时后再来看看是否编译完成。
编译成功后,敲:sudo make install(密码别敲错),这样opencv3.2.0就装到了你的/usr/local里面了。
4.nonfree模块被移除了,以后要用到怎么办?
opencv2里面经常被用到的模块:feature2d,简单点说,这个模块是用来处理图片特征模型的,大多数用到这个模块的都需要用到nonfree模块,但是opencv3把nonfree模块去掉了。这个模块现在被opencv_contrib取代了,可以在https://github.com/opencv/opencv_contrib下载到contrib源码,不过要注意的是,contrib版本跟opencv版本是对应的,使用opencv3.2.0就要用opencv_contrib3.2.0,https://github.com/opencv/opencv_contrib/releases列出了contrib的各个版本。
opencv_contrib3.2.0下载完后目录是这样的
把文件夹覆盖到opencv3.2.0相应的文件夹,然后到opencv3.2.0的release目录敲:cmake -G "Unix Makefiles" ..
呃...没错,失败了... protobuf-cpp-3.1.0.tar.gz文件哈希比对失败。
到这里下载protobuf-cpp-3.1.0.tar.gz吧,按照说明操作。
操作完成后重新敲:cmake -G "Unix Makefiles" ..
make
sudo make install
这样opencv_contrib也安装到/usr/local里面了。
5.如何测试安装是否成功?
用Xcode新建一个MacOS Command Tools的工程,加入如下配置
这些库哪里找到的?
点add other,敲一下"/",在弹出的窗口输入
go,选择所有dylib
这样,基本的配置就完成了。
新建一个HelloCV.cpp文件
//
// HelloCV.cpp
// opencv3.2.0test
//
// Created by joe chiu on 2017/6/1.
// Copyright © 2017年 joe chiu. All rights reserved.
//
#include <stdio.h>
#include <iostream>
#include "opencv2/core/core.hpp"
#include "opencv2/highgui/highgui.hpp"
using namespace cv;
using namespace std;
int main( int argc, char** argv )
{
Mat img = imread( "hello.png", CV_LOAD_IMAGE_UNCHANGED );
imshow("hello.png", img);
waitKey(0);
return 0;
}
运行
报错了?因为你的运行目录里面没有hello.png。
随便找个一个png图片,拷贝到运行目录,改名hello.png
运行目录?
猜猜看点哪个打开运行目录。
6.如何编译iOS上用的framework?
cd到opencv3.2.0的platforms/ios目录,敲入:python build_framework.py build
报错了?
因为之前把opencv_contrib加入到opencv里了,目前opencv_contrib没有支持iOS的版本,所以还是弄一个纯净的opencv3.2.0编译吧。