[openCV]Mac平臺下openCV的搭建(Xcode + openCV 2.4.10)
1.序言
從今天開始,開始使用Mac來跑openCV了。開始感覺其實應該開發阻力不是太大樣子,事實上來講,其實比Windows要繁瑣一些呢。現時點的配置為
- os x yosemite 10.10.3
- openCV 2.4.10(現時點的最新版本為:3.0 RC1)
- Xcode Version 6.3.2 (6D2105)
在這個配置下,我按照如下步驟搭建了我的openCV平臺。
2.配置環境的步驟
2.1 openCV的選擇
剛才也說了,現時點openCV的最近版本為openCV 3.0 RC1。我一開始也選擇了使用openCV 3.0 RC1,然而在配置完之後,程式編譯無法通過,有一個頭檔案貌似無法找到。當時也忘記了截圖,後續等3.0 RC1更新後,我再嘗試更新吧,那時候有還是有問題的話,我再把截圖放上來。
2.2 安裝openCV的前置準備
安裝brew
這個軟體挺強大的,是Mac平臺下一個套件的管理工具。可以使用一個命令,就可以來install與uninstall一個套件。其官網(http://brew.sh/index_zh-cn.html)寫了入手的方法。
在終端視窗中,輸入如下指令碼
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
安裝CMake
CMake是一個跨平臺的編譯工具,這個也是一個必須的工具。由於我們安裝了Homebrew,此時就可以在終端裡輸入以下命令,來install CMake。
sudo brew install cmake
這裡需要許可權。
IDE的選擇:Xcode的安裝
其實這裡有很多的選擇,我選擇了使用Apple自帶的Xcode去進行openCV的執行。這裡挺簡單的,直接download就可以了。
2.3 openCV的安裝
從這裡開始進行openCV的安裝,首先將下載好的zip檔案解壓,放到特定的路徑下。終端內,通過命令cd進入到該路徑下。然後執行下列程式碼
cd <path-opencv>
mkdir release
cd release
cmake -G "Unix Makefiles" ..
make
按照以上步驟,可以將openCV安裝好。這裡有個問題,我使用openCV 2.4.10安裝的時候,有個地方會跳兩個Error。
error: comparison of array 'this->latestPoints' not equal to a null pointer is always true
[-Werror,-Wtautological-pointer-compare]
if (latestPoints != NULL)
error: address of array 'this->latestCounts' will always evaluate to 'true' [-Werror,-Wpointer-bool-conversion]
if( latestCounts )
這兩個Error來自於calibfilter.cpp這個檔案,需要修改裡面的一部分程式碼之後,就能通過安裝了。具體的可以參考這個部落格,說的很詳細了。
按照這裡面的連結,在指定的幾個地方修改程式碼之後,就可以安裝上openCV 2.4.10了。
- 在路徑
/usr/local/include
下會生成opencv與opencv2子資料夾,裡面包含了許多opencv的標頭檔案。 - 在路徑
/usr/local/lib
下也會生成opencv的相關的庫。
2.4 openCV的解除安裝
解除安裝也挺簡單,回到release目錄下,執行命令sudo make uninstall
就妥妥的了。然後,需要手動清理一下/usr/local/
這個目錄下,關於opencv的一些相關檔案。
3.在Xcode下建立一個openCV project
- 首先開啟事先準備好的Xcode,在下面這個一個介面裡選擇OS X -> Application -> Command Line Tool
- 填寫自己的product的名字,然後選則語言為C++。
- 需要為新建的工程指定Header搜尋路徑。這裡,填入
/usr/local/include
與/usr/local/include/opencv
就可以了。
- 需要為新建的工程指定Library搜尋路徑。這裡,填入
/usr/local/lib
這裡其實還需要check一下 C++ standard library 是否為libstdc++。
最後,為工程新增所必須的.dylib檔案。在工程下新建個資料夾openCV_Frameworks,右鍵選擇Add Files to..
轉到路徑/usr/local/lib
內去尋找程式必須的.dylib檔案,這裡為了方便,我將所有的.dylib檔案都新增入了工程內。到此為止,mac下使用Xcode就可以開是進行openCV的開發了。測試用程式碼如下所示,從Mac自帶的攝像頭讀入影象,然後canny提取了邊緣然後顯示。
//
// main.cpp
// Camera_Capture
//
// Created by zhoufan on 15/5/24.
// Copyright (c) 2015年 zhoufan. All rights reserved.
//
#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
IplImage* doCanny(IplImage* image_input,
double lowThresh,
double highThresh,
double aperture)
{
if(image_input->nChannels != 1)
return (0);
IplImage* image_output = cvCreateImage(cvGetSize(image_input),
image_input->depth,
image_input->nChannels);
cvCanny(image_input,image_output,lowThresh,highThresh,aperture);
return(image_output);
}
int main(int argc, char* argv[])
{
cvNamedWindow("Camera" , CV_WINDOW_AUTOSIZE );
CvCapture* capture = cvCreateCameraCapture(CV_CAP_ANY);
assert(capture != NULL);
IplImage *frame = 0;
frame = cvQueryFrame(capture);
IplImage *frame_edge = cvCreateImage(cvGetSize(frame),
IPL_DEPTH_8U,
1);
while(1)
{
frame = cvQueryFrame(capture);
if(!frame) break;
cvConvertImage(frame,frame_edge,0);
frame = cvCloneImage(frame_edge);
frame_edge = doCanny(frame_edge,70,90,3);
cvShowImage("Camera",frame_edge);
char c = cvWaitKey(15);
if(c == 27) break;
}
cvReleaseCapture(&capture);
cvReleaseImage( &frame_edge );
cvReleaseImage( &frame);
return (int)0;
}
執行結果如下圖所示。
4.結言
到此,已經可以在Xcode下愉快的和openCV君玩耍了。其實想說的是,在安裝openCV 2.4.10的時候,還是會彈出一些warning, 或許在以後的開發中,會有些問題吧。嘛,到時候再說咯。
參考文獻
=============更新日誌===================
2015 - 5 - 25 初版