XCode+OpenCV

再转一篇Xcode+OpenCV

From: http://blog.youkuaiyun.com/fsseven/article/details/7958392

Mac上OpenCV环境确实各种麻烦。。。也可能是我不熟悉的关系。。。总之,折腾了我N久才搞定。。。

linux和windows上也没那么纠结。。。


下面说一下我在配置环境中碰到的问题和解决的方法吧

对于mac上开发C++来说,最常用的一个东西就是MacPorts(http://www.macports.org/index.php)

用了下这个东西,感觉它应该就是一个toolchain,或者说,有点像ubuntu的软件包管理器的东西,各种在开发中需要用到的库或者开发环境都可以从里面获得,而且是傻瓜式安装,傻瓜式管理

那么,如何安装macports?这个其实官方文档或者网上都能搜到,在这里我就简单介绍下

1. 从官网(上文已经给出)下载最新的MacPorts安装包,然后解压

2.执行基本的安装三部曲:

   cd #解压出来的文件夹#

   ./configure

   make

   sudo make install

3.三步完成后,会提示你把路径添加到$PATH,忘记记录默认路径是什么了,我是直接找到相关文件复制到/usr/bin/下面,这样就不用改PATH了

 (修改PATH的方法主要就是用 export 语句修改 )

这样,MacPorts就算安装完成了

现在在控制台输入port以后,应该就会进入MacPorts的控制台了,当然我们不需要进入,输入quit,回车后退出MacPorts的控制台


当MacPorts安装完成以后,接下来别先急着下载OpenCV,我们还需要对MacPorts进行更新

执行:

   sudo port -v selfupdate

等待完成


好了!一切准备就绪,我们可以开始安装OpenCV了!

执行:
  sudo port install opencv

耐心等待完成。。。

到这里,恭喜你!完成了OpenCV的安装。。。但是。。。显然还没有完。。。

因为,如果不在XCode里进行环境配置的话,我们无法使用OpenCV,配置环境过程其实还是比较简单
用过Visual Studio的应该都很清楚,无非指定头文件和lib库的地址

因为使用MacPorts安装OpenCV的话,默认头文件路径是在/opt/local/include,默认库文件是在/opt/local/lib中
所以我们新建一个控制台程序,指定语言为C++
然后在XCode里分别把这些填上

最后
#include<cv.h>
#include<highgui.h>
编译,运行

大功告成!!!
嗯。。按照网上的教程(http://opencv.willowgarage.com/wiki/Mac_OS_X_OpenCV_Port)
应该是这样的,但是,实际上你发现可能没那么好运,那么我来讲一下我实际碰到的一些问题吧

1.Ctrl+B(编译)以后提示,找不到opencv2下的一个什么core.h(忘记名字了。。:P)
这个应该是最初会碰到的一个问题
我的解决方法是同时包含 /opt/local/include /opt/local/include/opencv

2.头文件包含的问题解决后,再编译,发现还是有错。。。而且还是一大串。。。我碰到的时候吓了一跳。。。然后上网各种查
网上主要说原因是XCode默认不使用C++11的库,而opencv里使用的unordered_map是C++11里才有的,需要在项目属性里C++ Library里选择那个with C++11 Support的选项
那么,我就乖乖的选了。。。然后。。。嗯,不错,错误确实减少了,只有一个了。。。可是。。。这个错就百思不得其解了,好像是一个变量没定义
网上压根没有这个问题的解决办法。。。然后再拼命搜。。。经过一系列折腾后(这个折腾一会儿细说)我成功了。。。
我最终猜测其实不用选择with C++11 Support 而是只要把C++ Language Dialect选为GNU98就好了,它不支持我们不用还不行嘛。。

3.这里就说下我绕的圈子吧
因为我卡在之前提到的那个变量未定义的问题上,所以我就又开始找原因了。。。

然后找到这篇文章
http://stackoverflow.com/questions/8552839/compile-opencv-2-3-1-for-os-x-lion-mountain-lion-with-xcode
这里面提到,在10.8+XCode 4.3.2 安装OpenCV需要加参数
执行:
   sudo port install opencv configure.compiler=llvm-gcc-4.2

那么我就uninstall了opencv重新加了参数安装。。。
这次奇葩了。。。
先是装到python2.7的时候提示无法激活,要强制激活,好吧。。那就强制激活。。。
然后装到ffmpeg的时候。。。居然告诉我。。。无法安装(看日志好像是ffmpeg无法识别我们指定的架构)。。。好吧,又是一通搜,终于被我找到了!!!
http://d.hatena.ne.jp/zariganitosh/20100828/macport_x86_64
这边文章的大意就是,先备份已安装的ports的列表,然后彻底删除所有安装的ports,从网上下恢复ports的包进行恢复,然后重新再安装ffmpeg

port installed > myports.txt
sudo port -f uninstall installed
sudo port clean --work --archive all  //我执行这句提示没有--archive参数,我就删掉了,只执行 sudo port clean --work all,好像没影响

curl http://svn.macports.org/repository/macports/contrib/restore_ports/restore_ports.tcl -o restore_ports.tcl    //这里可能是恢复ports的一个脚本
chmod +x restore_ports.tcl
sudo ./restore_ports.tcl myports.txt

sudo port install ffmpeg

慢慢等。。。然后ffmpeg就安装完成了。。。
之后再执行
sudo port install opencv configure.compiler=llvm-gcc-4.2
毫无问题,顺利安装完成

之后再按照之前配置环境的步骤,我居然发现还是和之前一样的问题(详见1,2),我郁闷了,然后仔细研究了下XCode的选项,果断把C++ Language Dialect 改成GNU98

然后成功编译通过,链接通过

简单的载入了一张图片,然后显示出来,毫无问题,所以我怀疑,到问题2的时候就可以用这个方法进行解决的


终于搞定OpenCV了,庆祝下,嘿嘿
### 如何在 Xcode 中配置 OpenCV 环境 要在 Mac 的 Xcode 上成功配置 OpenCV C++ 开发环境,可以按照以下方法操作: #### 1. 获取 OpenCV 源码 可以通过下载官方发布的压缩包或者克隆 GitHub 仓库的方式获取 OpenCV 源码。推荐使用 Git 克隆方式以便于后续更新维护[^1]。 ```bash git clone https://github.com/opencv/opencv.git cd opencv git checkout 4.5.5 # 切换到指定版本 ``` #### 2. 安装依赖工具 `CMake` 为了编译 OpenCV 源码,需要先安装构建工具 CMake。可以选择通过 Conda 或 Homebrew 来完成安装: - 如果已经安装 Anaconda,则可以直接运行命令 `conda install cmake` 进行安装。 - 另一种常见方式是利用 Homebrew 工具执行 `brew install cmake`[^3]。 #### 3. 编译并安装 OpenCV 进入之前克隆下来的 OpenCV 文件夹目录,在终端创建一个新的子文件夹用于存放生成的中间产物以及最终库文件,并切换至该新建文件夹内启动 CMake 配置流程。 ```bash mkdir build && cd build cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ .. make -j8 sudo make install ``` 上述脚本中的参数解释如下: - `-D CMAKE_BUILD_TYPE=RELEASE`: 设置为发布模式优化性能; - `-D CMAKE_INSTALL_PREFIX=/usr/local`: 自定义目标安装位置,默认即 `/usr/local`; - 参数最后附加两个连续点号代表返回上级路径指向根项目地址。 #### 4. 创建新的 Xcode 工程 打开 Xcode 应用程序界面点击左上角菜单栏选项 “File -> New Project”,选择 Command Line Tool 类型模板继续下一步设置工程基本信息完成后保存磁盘等待加载完毕即可[^4]。 #### 5. 添加头文件与链接动态库 找到刚才安装好的 OpenCV 头文件所在的具体物理存储路径通常位于 `/opt/homebrew/Cellar/opencv/4.5.5_2/include/opencv4` (具体视个人实际安装情况可能略有差异),将其添加进项目的 Header Search Paths 字段里;同样地也要把对应的 `.dylib` 动态共享对象加入 Library Search Paths 当前工作区中去。 另外记得勾选 Enable Modules(Import as Module)开关开启模块化支持功能方便日后调用更加简洁高效。 至此整个基于 macOS 平台下的 Xcode+C++开发框架集成 OpenCV 图像处理类库的工作就全部完成了! ```cpp #include <iostream> #include <opencv2/opencv.hpp> int main() { cv::Mat image = cv::imread("/path/to/image.jpg"); if(image.empty()) { std::cout << "Could not read the image." << std::endl; return -1;} cv::imshow("Display window",image); int k = cv::waitKey(0); // Wait infinitely for user to press any key return 0; } ``` 以上是一个简单的测试案例用来验证当前环境中是否能够正常载入图片资源并通过窗口展示出来效果如何[^2]。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值