c++ - 在 mac os x sierra 上使用 opencv c++ 编译 hello world

标签 c++ macos opencv

第一次无法编译 hello world。 我已经学习了大量关于如何安装 opencv 的教程。 我只有以下示例:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace std;
using namespace cv;

int main()
{

    Mat imageMe = imread("test.jpg", 0);
    return 0;
}

来自 opencv 网站。 看起来很简单,但无法编译。

g++ display_image.cpp `pkg-config --cflags --libs opencv` -l

这是错误:

display_image.cpp:2:10: fatal error: 'opencv2/core/core.hpp' file not found
#include <opencv2/core/core.hpp>
         ^
1 error generated.

并运行:

pkg-config --cflags --libs opencv 

返回这个:

-I/usr/local/Cellar/opencv3/3.2.0/include/opencv -I/usr/local/Cellar/opencv3/3.2.0/include/opencv2 -L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l 

这些文件存在。

运行 ls/usr/local/Cellar/opencv3/3.2.0/include/opencv2/core | grep 核心.hpp 给出结果:

core.hpp

有什么问题?

编辑: 我一直在使用以下教程在我的机器上安装 opencv:

http://www.pyimagesearch.com/2016/12/19/install-opencv-3-on-macos-with-homebrew-the-easy-way/

https://www.learnopencv.com/install-opencv-3-on-yosemite-osx-10-10-x/

https://blogs.wcode.org/2014/10/howto-install-build-and-use-opencv-macosx-10-10/

http://seeb0h.github.io/howto/howto-install-homebrew-python-opencv-osx-el-capitan/

编辑:

即使在所有这些答案之后,我也无法编译单个应用程序。即使它能以某种方式找到直接包含在我的文件中的 .hpp 文件,它也找不到包含在里面的文件。

可能我的设置有误。 在/usr/local/Cellar/opencv3 我有 2 个目录: 3.2.0 - 可能安装了二进制文件 HEAD-9053839 - 从源代码编译

现在我在/usr/local/lib/pkgconfig 中也有 opencv.pc 文件:

prefix=/usr/local/Cellar/opencv3/3.2.0       
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${exec_prefix}/lib

Name: opencv
Description: The opencv library
Version: 2.x.x
Cflags: -I${includedir}/opencv -I${includedir}/opencv2
Libs: -L${libdir} -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l

作为前缀,我也尝试过 HEAD-9053839。

我创建了更简单的示例:

#include <opencv2/opencv.hpp>
int main(){return 0; }

它仍然告诉我找不到“opencv2/opencv.hpp”文件。 然后我打印了 pkg-config 所说的内容: pkg-config --cflags --libs opencv

-I/usr/local/Cellar/opencv3/3.2.0/include/opencv -I/usr/local/Cellar/opencv3/3.2.0/include/opencv2 -L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l 

并且发现应该直接包含目录,而不是 opencv/opencv2 子目录。

所以我像这样运行 g++:

g++ -I/usr/local/Cellar/opencv3/3.2.0/include -L/usr/local/Cellar/opencv3/3.2.0/lib -lopencv_calib3d -lopencv_imgproc -lopencv_contrib -lopencv_legacy -l display_image.cpp

然后它告诉我:

ld: library not found for -lopencv_contrib

删除后它说:

ld: library not found for -lopencv_legacy

然后我不得不在 display_image.cpp 之前删除 -l,但是我又遇到了另一个错误:

Undefined symbols for architecture x86_64:
  "cv::String::deallocate()", referenced from:
      cv::String::~String() in display_image-9d8f86.o
      cv::String::operator=(cv::String const&) in display_image-9d8f86.o

这就是 hell 。

最佳答案

我没有编译环境来重新生成您的错误,但我认为问题出在您代码中的这些行:

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>

因为正在搜索opencv目录

/usr/local/Cellar/opencv3/3.2.0/include/opencv2

正如您的“pkg-config --cflags --libs opencv”所暗示的那样。所以,我想,将包含行更改为

#include <core/core.hpp>
#include <highgui/highgui.hpp>

会有帮助,或者您可以像这样隐式声明要搜索的目录:

g++ -I/usr/local/Cellar/opencv3/3.2.0/include display_image.cpp ...

关于c++ - 在 mac os x sierra 上使用 opencv c++ 编译 hello world,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42300748/

相关文章:

c++ - Eclipse "implement method"函数不适用于模板类

c++ - Mac 上的 Visual Studio 使用 VS2015 故障性能测试--Z : not considered a local drive

database - Unix 域套接字 "/tmp/.s.PGSQL.5432"上的 Postgres 连接?

OpenCV 随机森林 : Setting a random seed

c++ - 以下问题的蛮力技术

macos - osx 音频单元多 channel 输出

objective-c - OSX bundle 架构

c++ - 光照不变图像

python - 使用MSS和OpenCV捕获监视器

c++ - 在 C++ 中比较日期的方法是什么