[英]Running OpenCV 3 in Mac Terminal
在過去的一周里,我一直在嘗試使用終端運行一些簡單的OpenCV程序。 我已嘗試過各種論壇的許多教程和建議,但收效甚微。 嘗試將OpenCV頭文件鏈接到我的OpenCV主程序時出現問題。 對於一個簡單的c ++程序,我只需執行g++ main.cpp header.hpp
來生成可執行的程序。 如何鏈接必要的OpenCV頭文件,如<opencv2/highgui/highgui.hpp>
和<opencv2/core/core.hpp>
?
例如,當試圖從http://docs.opencv.org/2.4/doc/tutorials/introduction/display_image/display_image.html執行示例程序時,會發生以下情況:
桌面Robert $ g ++ loadIMG.cpp架構x86_64的未定義符號:“cv :: namedWindow(cv :: String const&,int)”,引用自:loadIMG-54c517.o中的_main“cv :: Mat :: deallocate()” ,引用自:loadIMG-54c517.o中的cv :: Mat :: release()“cv :: Mat :: copySize(cv :: Mat const&)”,引自:cv :: Mat :: operator =(cv: :mat const&)in loadIMG-54c517.o“cv :: String :: deallocate()”,引用自:loadIMG-54c517.o中的cv :: String :: ~String()“cv :: String :: allocate( unsigned long)“,引用自:loadIMG-54c517.o中的:cv :: String :: String(char const *)”cv :: imread(cv :: String const&,int)“,引用自:loadIMG-54c517中的_main .o“cv :: imshow(cv :: String const&,cv :: _ InputArray const&)”,引用自:loadIMG-54c517.o中的_main“cv :: waitKey(int)”,引用自:loadIMG-54c517中的_main .o“cv :: fastFree(void *)”,引用自:loadIMG-54c517.o中的:cv :: Mat :: ~Mat()ld:找不到架構x86_64 clang的符號:錯誤:鏈接器命令失敗退出代碼1(使用-v查看調用)
請注意:OpenCV已經使用以下教程構建: http : //blogs.wcode.org/2014/10/howto-install-build-and-use-opencv-macosx-10-10/
任何幫助或方向將不勝感激。 謝謝。
你沒有指定:
-I"/path/to/your/include"
我在/opt/local/include
有opencv頭文件,在/opt/local/lib
,所以要編譯這樣的基本程序:
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main( int argc, char** argv )
{
Mat src = Mat(Size(320,240),CV_64F);;
namedWindow("test");
cout << "press any key to close" << endl;
while(true){
randn(src,0,1.0);
imshow("test",src);
if(waitKey() > 0) break;
}
}
我這樣編譯:
g++ main.cpp -I"/opt/local/include/" -L"/opt/local/lib/" -lopencv_core -lopencv_highgui -o main
然后運行./main
:
請記住,您可能在/usr/local
文件夾中安裝opencv而不是/opt/local
具體取決於您編譯/安裝OpenCV的方式。
此外,您可能安裝了pkg-config,當您需要鏈接更多庫時,它可以派上用場。
例如,您可以運行:
pkg-config --libs --cflags opencv
在我的情況下輸出:
-I/opt/local/include/opencv -I/opt/local/include -L/opt/local/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_nonfree -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab
但在您的情況下,它應輸出您的特定OpenCV路徑。
這將簡化對此的編譯:
g++ main.cpp `pkg-config --libs --cflags opencv` -o main
您鏈接的指南使用cmake
為您生成Makefile。 這是另一個不錯的選擇。 此外,基於相同的指南,您應該安裝XCode,您可以使用它來創建命令行工具並指向標題搜索路徑和庫搜索路徑。
我創建了一個類似的文件,可能會幫助你。
首先我使用:
sudo brew install opencv
然后我根據終端給出的提示安裝opencv.3.0
。 然后在需要來自opencv
的API的.cpp
文件中,我使用:
#include "opencv2/opencv.hpp"
作為我唯一包含opencv
文件。 實際上,在那個項目中我使用了highgui
, core
和imgprog
。 但不用擔心,我會告訴你如何在鏈接部分解決它們。
完成項目后,您將在終端上編譯項目。
因為我也使用了JNI接口,所以我仍然需要鏈接jni.h。
開始了:
g++ xxxx.cpp xxx.cpp -lstdc++ -fPIC -shared (to create a shared object)
-I/absolute path/ (we can use -I to be followed with the absolute path of the library you need to use )
-I/Users/yuanzhan/Downloads/OpenCV-2.0.0/src/
-I /Users/yuanzhan/Downloads/OpenCV-2.0.0/include/opencv/ -I/usr/local/Cellar/opencv3/3.1.0_3/lib -lopencv_core (open the library for use if you use the API fro here)-lopencv_highgui -lopencv_imgproc -L.(i put the cv2. on local otherwise you can add the absolute path here) -lcv2(use the package) -v -o libopenCvSDK.so(generate my .so package).
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.