[英]Compiling hello world with opencv c++ on mac os x sierra
我第一次無法編譯你好世界。 我已經按照大量的教程如何安裝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
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; }
它仍然告訴我找不到'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
並且發現它寧可應該直接包含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
這是地獄。
我沒有編譯環境來重新生成您的錯誤,但我認為問題在於您的代碼中的這些行:
#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 ...
在OpenCV 3.x中 ,頭文件的布局已經改變,現在你幾乎只使用:
#include <opencv2/opencv.hpp>
所以,具體而言,我建議你用上面的咒語替換你的第二和第三行。
請參閱OpenCV過渡指南 。
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。
我做的! 這是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}
我已經替換了位於以下的舊opencv.pc: /usr/local/lib/pkgconfig
現在我沒有收到任何錯誤。
我還必須使用不同的包含文件:
#include <opencv2/opencv.hpp>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.