前提:在Qt中使用OpenCV之前,我已经安装好OpenCV,在bash shell里可以使用了。
在shell里面使用的时候,附加命令 `pkg-config opencv --cflags --libs` ,也就是 g++ test_opencv.cpp -o test `pkg-config opencv --cflags --libs`
查了命令`pkg-config opencv --cflags --libs`的意思,大致是表示,借助opencv.pc这个文件,指引出头文件和库文件的路径。
可以用echo `pkg-config opencv --cflags --libs` 命令看看他的内容:
-I/usr/local/include/opencv -I/usr/local/include -L/usr/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_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl查了几个小时后,才明白有两种方案可以在Qt中配置OpenCV
方案一:
在Qt项目的.pro文件中加入两项:
1 指示头文件的位置
INCLUDEPATH += -I/usr/local/include/opencv -I/usr/local/include2 指示库文件的位置
LIBS += -L/usr/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_ocl -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lrt -lpthread -lm -ldl
就是把`pkg-config opencv --cflags --libs`结果的前半部分和后半部分,分别写道.pro文件。
方案二:
同样在Qt的.pro文件中,加入两行:
CONFIG += link_pkgconfig PKGCONFIG += opencv
就可以编译通过了OpenCV项目了。
总结:查询类似问题的解决方法,不能只从现象去查,最好还是理解原理,这样看着好像是要费时间,其实总体是省事的。
我开始查的是“如何在linux centos,Qt中配置OpenCV”,找到几个在Ubuntu下配置的方法,但是他们的头文件路径和我不同,库文件也才两三个,而且格式是全路径:
LIBS += /usr/local/lib/libopencv_highgui.so \ /usr/local/lib/libopencv_core.so \ /usr/local/lib/libopencv_imgproc.so我要是敲全路径,肯定累死。
于是乎,想到能不能在Qt中,某个位置也加上`pkg-config opencv --cflags --libs`。试了半天也没用。
最后试了各种方法都行不通,才想到应该了解这个指令的含义。
结果,查了两下,就知道怎么弄了。