本文原創,未經贊成,謝絕轉載!(轉載請告知本人而且通過本人贊成--By Pacific-hong)html
本人小碩一枚,由於專業方向圖像相關,因此用到opencv,而後網上MAC下Xcode配置opencv的教程比較少,要否則就是過期了。因此在一番倒騰以後,成功配置了OpenCV。寫下本文供他人蔘考,少走彎路。ios
一.版本介紹git
首先介紹macOS,Xcode,OpenCV版本:github
macOS: macOS Sierra 10.12.4macos
Xcode: Xcode 8.3(8E162)windows
OpenCV:opencv 2.4.13.2ruby
二.安裝OpenCVcurl
不要從官網下載opencv,由於官網沒有macos版本(ios版本不能用在macbook下),本文中使用HomeBrew安裝,方便快捷。測試
1) 打開終端:複製粘貼下面腳本:ui
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
若是已經安裝過會有提示,就不會再安裝了,關於HomeBrew的安裝,能夠參考 http://www.cnblogs.com/lzrabbit/p/4032515.html
出現Installation successful 就說明已經安裝成功了,輸入執行brew help能查看brew的具體用法.
2) 爲了保證套件的完整,接着執行官網的建議腳本,安裝wget.
brew install wget
3) 接着裝cmake,這個是必需要裝的.
brew install cmake
4) 重點:這裏就是不一樣於網上大部分mac配置opencv方法之處,讓brew幫咱們下載OpenCV,而不是本身上OpenCV官網下載,切記,我從頭至尾都不會讓讀者上官網去下載,由於我沒有成功,這裏感謝提出這種方法的大大mac下配置openCV(看看就行,畢竟文章很早了).
brew install opencv
這裏直接執行這個命令可能會報一個小小的錯,不過可有可無,大概意思就是不能直接找到這個命令,終端會本身接着找,而後會告訴你正確的命令應該怎麼寫,因爲當時沒有截圖,因此具體命令我不記得了,實在抱歉,你們只要稍微有點英語基礎,大概看下終端彈出來的描述,就可以知道具體應該執行的命令行了,這裏應該是會提示出兩個命令,選擇關鍵字是opencv的執行便可,執行後brew會自動下載opencv,上圖(由於本人機器上已經安裝,因此沒有顯示安裝的過程,不過這個不重要了):
這就是我最後裝的OpenCV的版本,這就是爲何我不用最新的版本(由於根本沒得選??????),不過你們放心,brew既然選擇了這個版本天然有他的理由,讀者也不用糾結這個問題,舊一點的版本不必定就很差.
下面是本地的安裝目錄:
/usr/local/Cellar目錄下的文件都是brew幫咱們下載好的,裏面的cmake,wget,opencv是咱們本身下載的,其餘的都是brew幫咱們下的(應該都是有用的東西,什麼都不要咱們管,很方便有沒有).
三.在Xcode上配置OpenCV
建立一個空的command line 工程:選擇OS X -> Application -> Command Line Tool->Next;填寫本身的product名,選擇語言爲C++,選擇本身存放的目錄。
而後就是opencv的配置了:
點擊工程,選擇TARGETS->右側選擇All->Build Settings -> 搜索框輸入search paths ->選擇search paths下面的Header Search Parhs ->雙擊後面的詳細信息添加指定路徑:/usr/local/include (你們能夠點擊空白桌面按shift+command+g前往該目錄下查看,這裏目錄裏有剛纔下好的OpenCV庫的頭文件)
選擇search paths下面的Library Search Parhs ->雙擊添加指定路徑:/usr/local/lib (這裏包含了所須要的庫文件).
右擊工程new一個group,而後打開/usr/local/Cellar/opencv/2.4.13.2/lib目錄(一樣點擊下空白桌面,而後shift+command+g)這個目錄以前帶你們看過一次就是brew幫咱們下載的opencv目錄下的lib目錄,而後你們按照文件種類排序能夠看到一些.dylib文件,將這些.dylib文件拖入剛纔新建的文件夾下.我這裏是18個文件,網上有說要加全部後綴是dylib文件,其實左下角帶箭頭的那些不用管.
關於如何進入/usr目錄,還有一種方法:雙指點擊(至關於windows下的右擊)finder,而後點擊「Go to Folder」,在彈出的搜索框輸入/usr,就能進入/usr目錄啦。
至此,OpenCV配置大功告成。
這裏獻上一段zhoufan大大的測試代碼,測試用代碼以下所示,從Mac自帶的攝像頭讀入圖像,而後canny提取了邊緣而後顯示。
1 #include <iostream> 2 #include <opencv2/core/core.hpp> 3 #include <opencv2/highgui/highgui.hpp> 4 #include <opencv2/opencv.hpp> 5 6 7 using namespace std; 8 using namespace cv; 9 10 IplImage* doCanny(IplImage* image_input, 11 double lowThresh, 12 double highThresh, 13 double aperture) 14 { 15 if(image_input->nChannels != 1) 16 return (0); 17 18 IplImage* image_output = cvCreateImage(cvGetSize(image_input), 19 image_input->depth, 20 image_input->nChannels); 21 22 cvCanny(image_input,image_output,lowThresh,highThresh,aperture); 23 24 return(image_output); 25 } 26 27 28 int main(int argc, char* argv[]) 29 { 30 cvNamedWindow("Camera" , CV_WINDOW_AUTOSIZE ); 31 32 CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY); 33 34 assert(capture != NULL); 35 36 IplImage *frame = 0; 37 frame = cvQueryFrame(capture); 38 39 IplImage *frame_edge = cvCreateImage(cvGetSize(frame), 40 IPL_DEPTH_8U, 41 1); 42 while(1) 43 { 44 frame = cvQueryFrame(capture); 45 if(!frame) break; 46 47 cvConvertImage(frame,frame_edge,0); 48 frame = cvCloneImage(frame_edge); 49 50 frame_edge = doCanny(frame_edge,70,90,3); 51 52 cvShowImage("Camera",frame_edge); 53 char c = cvWaitKey(15); 54 if(c == 27) break; 55 } 56 57 cvReleaseCapture(&capture); 58 cvReleaseImage( &frame_edge ); 59 cvReleaseImage( &frame); 60 61 62 return (int)0; 63 }
貼幾張本身跑出來的測試圖:
程序運行各項設備利用率: