我第一次无法编译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 core.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; }
它仍在告诉我&#39; opencv2 / opencv.hpp&#39;文件未找到。 然后我打印了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
并且发现它应该直接包含dir,而不是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
这是地狱。
答案 0 :(得分:3)
我没有编译环境来重新生成您的错误,但我认为问题与代码中的这些行有关:
#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 ...
答案 1 :(得分:1)
在 OpenCV 3.x 中,标题文件的布局已更改,现在您只需使用:
#include <opencv2/opencv.hpp>
所以,具体而言,我建议你用上面的咒语替换你的第二和第三行。
答案 2 :(得分:0)
Soner的答案应解决OP的问题。我想补充一些其他解决方案。
如果您使用CMake从源代码安装openCV,它会将OpenCV库放在/usr/local/lib
和/usr/local/include
中的OpenCV标头中。标题全部放在子文件夹/usr/local/include/opencv
中。由于它们是大多数IDE的默认库和头文件目录,因此您找到的所有示例都将使用该配置。
现在,brew
并未将OpenCV安装到您已经知道的上述文件夹中。所以你有三个选择:
更改OpenCV库和标题的编译器搜索路径:g++ -I/usr/local/Cellar/opencv3/3.2.0/include -L/usr/local/Cellar/opencv3/3.2.0/lib
软链接/usr/local/Cellar/opencv3/3.2.0/include/opencv
至/usr/local/include
和/usr/local/Cellar/opencv3/3.2.0/lib
至/usr/local/lib
使用CMake从源代码安装OpenCV。
答案 3 :(得分:0)
我做到了!
这是pkg-config的问题。
在/usr/local/Cellar/opencv3/3.2.0/lib/pkgconfig
我找到了opencv.pc,如下所示:
# Package Information for pkg-config
prefix=/usr/local/Cellar/opencv3/3.2.0
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir_old=${prefix}/include/opencv
includedir_new=${prefix}/include
Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.2.0
Libs: -L${exec_prefix}/lib -lopencv_shape -lopencv_stitching -lopencv_objdetect -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_ml -lopencv_imgproc -lopencv_flann -lopencv_core
Libs.private: -framework OpenCL -L/usr/local/opt/jpeg/lib -ljpeg -L/usr/local/lib -lpng -ltiff -lImath -lIlmImf -lIex -lHalf -lIlmThread -L/usr/lib -lz -framework Cocoa -framework AVFoundation -framework CoreGraphics -framework CoreMedia -framework CoreVideo -framework QuartzCore -framework Accelerate
Cflags: -I${includedir_old} -I${includedir_new}
我已替换位于/usr/local/lib/pkgconfig
的旧opencv.pc
现在我没有收到任何错误。
我还必须使用不同的包含文件:
#include <opencv2/opencv.hpp>