在OSX 10.6上使用MacPorts安装OpenCV

3

我尝试按照MacPorts安装OpenCV的说明进行安装。具体来说,需要输入以下命令:

sudo port install opencv

在终端中。

安装/编译似乎很顺利,文件已经按照应该的方式存放在/opt/local子目录中。作为第一个测试,我尝试在C++源文件中包含highgui.h:

#include <highgui.h>

但是使用g ++或gcc编译时,我遇到了“错误:highgui.h:没有这样的文件或目录”的问题。我是在Mac上开发的新手,也许我错过了什么?我认为我可能需要设置一些路径变量,并在谷歌搜索时阅读了一些帖子后,我尝试设置DYLD_LIBRARY_PATH = / opt / local / lib,但那只是一个猜测,似乎没有帮助。我应该怎么做才能使编译器找到库呢?
谢谢!
4个回答

3

我也曾经很长时间无法使其正常工作,直到我发现有一个pkg-config设置。

只需执行以下操作即可编译而不出现问题:

g++ `pkg-config --libs --cflags opencv` -o helloWorld  helloWorld.cpp 

如果你使用 C 而不是 C++,可以使用 gcc。希望这能帮到你!

"pkg-config --libs --cflags opencv" 必须使用特殊的反引号进行转义,但 stackoverflow 会将其解释为代码标签。 - Thomas Morke

2
MacPorts会在/opt/local/include目录中安装C/C++的头文件,这不是系统默认路径。这意味着你必须显式地告诉GCC在哪里查找你正在使用的头文件。你可以通过指定“-isystem”或“-I”命令行选项来实现:
-isystem dir 在由-I指定的所有目录之后,在标准系统目录之前,搜索目录dir中的头文件。将其标记为系统目录,因此它将像标准系统目录一样得到特殊处理。如果dir以“=”开头,则“=”将被sysroot前缀替换;请参阅--sysroot和-isysroot。
-Idir 将目录dir添加到要搜索头文件列表的目录列表的开头。这可用于覆盖系统头文件,并替换成您自己的版本,因为这些目录是在系统头文件目录之前搜索的。但是,不应将此选项用于添加包含供应商提供的系统头文件的目录(对此,请使用-isystem)。如果使用多个-I选项,则按从左到右的顺序扫描目录;标准系统目录位于其后。
如果用-I指定了标准系统包含目录或-isystem指定的目录,则忽略-I选项。该目录仍将被搜索,但作为系统目录位于系统包含链中的正常位置。这是为了确保GCC修复错误的系统头文件的过程以及include_next指令的排序不会被意外更改。如果确实需要更改系统目录的搜索顺序,请使用-nostdinc和/或-isystem选项。
我建议使用-isystem,因为它可以禁用一些你不能通过修改代码来解决的警告。例如,在使用-std=c++0x编译代码时使用std::auto_ptr等等。
同样适用于库。你必须使用-L选项告诉GCC在哪里查找它们。

1

引用自OpenCV维基页面: http://opencv.willowgarage.com/wiki/CompileOpenCVUsingMacOSX

设置环境变量如下:

export PKG_CONFIG_PATH=/opt/local/lib/pkgconfig
export LD_LIBRARY_PATH=/opt/local/lib

并且可以像这样编译OpenCV代码:

g++ -bind_at_load `pkg-config --cflags opencv` morphology.c -o morphology `pkg-config --libs opencv`

然后像这样运行代码:

./morphology

0

我安装Macports很顺利,强烈建议在安装OpenCV之前安装TBB,会有巨大的速度提升(不幸的是反过来是行不通的)。

#include <highgui.h> 不是C++头文件。

请使用#include<opencv2/highgui/highgui.hpp>以及它的朋友们,位于/opt/local/include中,避免使用/opt/local/include/opencv中的任何内容。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接