【发布时间】:2018-06-19 12:01:27
【问题描述】:
我正在尝试通过命令行编译和运行 OpenCV。我可以让主要的 Open CV 库正常工作,但我认为我的问题在于使用 opencv_contrib 库。
我已经用 home brew 安装了 Open CV。
我可以从另一个SO question 编译和运行以下代码:
#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++ cv.cpp -I"/usr/local/Cellar/opencv/3.4.1_5/include" -L"/usr/local/Cellar/opencv/3.4.1_5/lib/" -lopencv_core -lopencv_highgui -o cv
然后运行 ./main
但是,当我尝试使用 opencv_contrib 库运行任何东西时,我会在像这样编译时出现此错误:
g++ cv.cpp -I"/usr/local/Cellar/opencv/3.4.1_5/include" -L"/usr/local/Cellar/opencv/3.4.1_5/lib/" -I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core -o cv
错误:
Undefined symbols for architecture x86_64:
"cv::xfeatures2d::SURF::create(double, int, int, bool, bool)", referenced from:
_main in cv-f48298.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我相信这可能是由于没有指定 opencv_contrib 库。我知道它们是随自制软件一起安装的。在我的地窖目录中,我有一个 opencv 和 opencv_contrib 目录。我不确定 opencv_contrib 目录是否需要位于 opencv 目录中。
但我相信一切都像这样:
pkg-config --libs --cflags opencv
它输出:
-I/usr/local/include/opencv -I/usr/local/include -L/usr/local/lib -lopencv_dnn -lopencv_ml -lopencv_objdetect -lopencv_shape -lopencv_stitching -lopencv_superres -lopencv_videostab -lopencv_calib3d -lopencv_features2d -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_video -lopencv_photo -lopencv_imgproc -lopencv_flann -lopencv_core
但是,如果我将其添加到我的命令中,例如:
g++ cv.cpp -I"/usr/local/Cellar/opencv/3.4.1_5/include" -L"/usr/local/Cellar/opencv/3.4.1_5/lib/" pkg-config --libs --cflags opencv -o cv
我明白了:
clang: error: unsupported option '--libs'
clang: error: unsupported option '--cflags'
clang: error: no such file or directory: 'pkg-config'
clang: error: no such file or directory: 'opencv'
我可以在 Xcode 中编译相同的代码,我只需要添加 openCV 目录的搜索路径并在其中添加库。我可以通过在 finder 中打开产品文件夹并使用传入的图像运行 ./cv 来运行代码。但我正在努力通过命令行来完成这一切。
任何帮助都会很棒!
【问题讨论】:
-
当你用 homebrew 安装 opencv 时,你是否使用了
--with-contrib选项? -
是的。我也可以通过链接其他链接器标志在 Xcode 中正常编译。链接
-I/usr/local/Cellar/opencv/3.4.1_5/include/opencv,-L/usr/local/Cellar/opencv/3.4.1_5/lib,-I/usr/local/Cellar/opencv/3.4.1_5/include并在/usr/local/Cellar/opencv/3.4.1_5/lib中添加所有 3.41 库文件 -
对我来说效果很好,使用 cmake 使用命令
find_package(OpenCV REQUIRED)和后来的target_link_libraries(myproject ${OpenCV_LIBS})进行构建