簡體   English   中英

在Mac終端中運行OpenCV 3

[英]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/

任何幫助或方向將不勝感激。 謝謝。

你沒有指定:

  1. 包含路徑(標題搜索路徑)使用-I"/path/to/your/include"
  2. 使用-L“/ path / to / libraries”的庫路徑
  3. 鏈接哪些庫,在本例中為core和highgui:-lopencv_core -lopencv_highgui

我在/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

opencv測試

請記住,您可能在/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,您可以使用它來創建命令行工具並指向標題搜索路徑和庫搜索路徑。

Xcode命令行工具項目創建

我創建了一個類似的文件,可能會幫助你。

首先我使用:

sudo brew install opencv

然后我根據終端給出的提示安裝opencv.3.0 然后在需要來自opencv的API的.cpp文件中,我使用:

#include "opencv2/opencv.hpp"

作為我唯一包含opencv文件。 實際上,在那個項目中我使用了highguicoreimgprog 但不用擔心,我會告訴你如何在鏈接部分解決它們。

完成項目后,您將在終端上編譯項目。

因為我也使用了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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM