OpenCV配置 由于我的Ubuntu 16.04不知道什么时候已经安装了OpenCV,所以这里省略了安装过程。注意的是我的OpenCV应该不是按照官网的编译方式安装的,应该是之前有一些环境配置时所需依赖时以其他的方式安装的。
在vs code编译器中,用简单的读取图片的代码测试,运行时出现下面错误:
1 2 3 4 5 6 7 8 9 /tmp/cc9zYXpi.o: In function 'main': /home/xxx/c++/main.cpp:5: undefined reference to 'cvLoadImage' /home/xxx/c++/main.cpp:6: undefined reference to 'cvNamedWindow' /home/xxx/c++/main.cpp:7: undefined reference to 'cvShowImage' /home/xxx/c++/main.cpp:8: undefined reference to 'cvWaitKey' /home/xxx/c++/main.cpp:9: undefined reference to 'cvReleaseImage' /home/xxx/c++/main.cpp:10: undefined reference to 'cvDestroyWindow' collect2: error: ld returned 1 exit status The terminal process terminated with exit code: 1
我对于该错误出现的推测是,因为测试程序是在之前配置运行c++的环境下运行的,所以设置的默认编译指令也是用的之前的,所以对于当前的并不适用,应该需要对于OpenCV所需的指令重新设定默认编译指令。
在vs code中由于设置的问题出现报错,那有一种通用的方式是在终端输入命令行完成编译。命令行如下:
1 g++ main.cpp -o main_out `pkg-config --cflags --libs opencv`
注意 :这里是`而不是‘,否则无法编译成功。
pkg-config
可用于列举某个库的相关信息,比如此库的路径/相关头文件等。比如:
1 2 3 4 5 ~$ pkg-config --cflags opencv -I/usr/include/opencv ~$ pkg-config --libs opencv /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so -lopencv_calib3d /usr/lib/x86_64-linux-gnu/libopencv_contrib.so -lopencv_contrib /usr/lib/x86_64-linux-gnu/libopencv_core.so -lopencv_core /usr/lib/x86_64-linux-gnu/libopencv_features2d.so -lopencv_features2d /usr/lib/x86_64-linux-gnu/libopencv_flann.so -lopencv_flann /usr/lib/x86_64-linux-gnu/libopencv_gpu.so -lopencv_gpu /usr/lib/x86_64-linux-gnu/libopencv_highgui.so -lopencv_highgui /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so -lopencv_imgproc /usr/lib/x86_64-linux-gnu/libopencv_legacy.so -lopencv_legacy /usr/lib/x86_64-linux-gnu/libopencv_ml.so -lopencv_ml /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so -lopencv_objdetect /usr/lib/x86_64-linux-gnu/libopencv_ocl.so -lopencv_ocl /usr/lib/x86_64-linux-gnu/libopencv_photo.so -lopencv_photo /usr/lib/x86_64-linux-gnu/libopencv_stitching.so -lopencv_stitching /usr/lib/x86_64-linux-gnu/libopencv_superres.so -lopencv_superres /usr/lib/x86_64-linux-gnu/libopencv_ts.so -lopencv_ts /usr/lib/x86_64-linux-gnu/libopencv_video.so -lopencv_video /usr/lib/x86_64-linux-gnu/libopencv_videostab.so -lopencv_videostab
通过这种方式就可以开始OpenCV的学习了,但是这样会很不方便吧,所以还是要在vs code中配置一套属于OpenCV的环境。
由上面的过程可以知道,究其原因就是之前的vs code设置的默认指令不匹配造成。同时也知道正确的指令应该是g++ main.cpp -o main_test.out 'pkg-config --cflags --libs opencv'
。 配置vs code的环境大同小异,这里简述一下:
1.新建文件夹LearningOpenCV 2.在根目录下新建.vscode文件夹,并在该文件夹下新建launch.json,settings.json,tasks.json三个设置文件 3.其中launch.json,settings.json的设置可以参考其他,重要的是tasks.json中args参数的设置,这个是默认指令的设置。我的tasks.json设置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 { "version" : "2.0.0" , "tasks" : [ { "label" : "build" , "type" : "shell" , "command" : "g++" , "args" :["-g" ,"${workspaceRoot}/main.cpp" ,"-o" ,"main_test.out" ,"`pkg-config" ,"--cflags" ,"--libs" ,"opencv`" ], "presentation" : { "reveal" : "always" , "panel" : "new" }, "problemMatcher" : { "owner" : "cpp" , "fileLocation" :["relative" , "${workspaceRoot}" ], "pattern" :[ { "regexp" : "^([^\\\\s].*)\\\\((\\\\d+,\\\\d+)\\\\):\\\\s*(.*)$" , "file" : 1 , "line" : 2 , "column" : 3 , "severity" : 4 , "location" : 2 , "message" : 5 } ] } } ] }
可以看到tasks.json中的args参数正是我们上面说到的终端指令。注意 :由于args的参数设置时不能包含空格,所以pkg-config --cflags --libs opencv
需要不同的引号分开,同时`注意不要搞错或者忘记。 到此为止,vs code的OpenCV编译环境已经完成了,接下来就在Ubuntu下面开始OpenCV的学习吧!