多个版本opencv的调用方法

1. cmakelist的方式

关键文件:OpenCVConfig.cmake。在opencv编译好后,所在目录中一般会有一个叫OpenCVConfig.cmake的文件,这个文件中指定了CMake要去哪里找OpenCV,其.h文件在哪里等,比如其中一行:

# Provide the include directories to the caller 
set(OpenCV_INCLUDE_DIRS "/home/ubuntu/src/opencv-3.1.0/build" "/home/ubuntu/src/opencv-3.1.0/include" "/home/ubuntu/src/opencv-3.1.0/include/opencv") 

只要让CMake找到这个文件,这个文件就指定了Opencv的所有路径,因此设置OpenCV_DIR为包含OpenCVConfig.cmake的目录,如在C++工程CMakeLists.txt中添加:

set(OpenCV_DIR "/home/ubuntu/src/opencv-3.1.0/build") 

因此,我们期望使用哪个版本的Opencv,只要找到对应的OpenCVConfig.cmake文件,并且将其路径添加到工程的CMakeLists.txt中即可了。

 

2. Makefile的方式

关键文件:opencv.pc 。在Makefile下,应该是可以在其中详细设定Opencv路径,要使用到哪些库等等(我没有仔细学习过Makefile的使用)。在此,我想介绍一种简单的在Makefile下指定期望使用的Opencv版本的方法,该方法借助linux下pkg-config命令。

我们常常使用pkg-config --modversion 来查看指定库的版本,比如查看opencv版本pkg-config --modversion opencv。其实pkg-config显示的信息来自于这个库对应的.pc文件,比如安装了opencv后,我们可以在/usr/lib/pkg-config/ 文件夹下找到opencv.pc,内容如下:

# Package Information for pkg-config 
prefix=/usr exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir_old=${prefix}/include/opencv includedir_new=${prefix}/include Name: OpenCV Description: Open Source Computer Vision Library Version: 2.4.12.2 Libs: -L${exec_prefix}/lib -lopencv_calib3d -lopencv_contrib -lopencv_core -lopencv_features2d -lopencv_flann -lopencv_gpu -lopencv_highgui -lopencv_imgproc -lopencv_legacy -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_superres -lopencv_ts -lopencv_video -lopencv_videostab -lopencv_detection_based_tracker -lopencv_esm_panorama -lopencv_facedetect -lopencv_imuvstab -lopencv_tegra -lopencv_vstab -L/usr/local/cuda-7.0/targets/armv7-linux-gnueabihf/lib -lcufft -lnpps -lnppi -lnppc -lcudart -ltbb -lrt -lpthread -lm -ldl Cflags: -I${includedir_old} -I${includedir_new} 

当然,我们也可以使用

pkg-config --cflags opencv pkg-config --libs opencv 

分别查看opencv库的包含目录(include/, .h)和库名称(.so)。在Makefile中,可以通过以上命令设定opencv库相关目录。如下:

COMMON+= -DOPENCV CFLAGS+= -DOPENCV LDFLAGS+= `pkg-config --libs opencv` COMMON+= `pkg-config --cflags opencv` 

此时Makefile对应的工程使用的opencv库即为opencv.pc文件中所指的版本。本例中为2.4.12.2。

那么可以容易想到,如果在/usr/lib/pkgconfig文件夹目录下添加opencv-3.1.0.pc文件,是否就可以将版本指向opencv-3.1.0l了呢?答案是肯定的,可以将pc文件拷贝到/usr/lib/pkgconfig文件夹底下,例如上面重命名为opencv-3.1.0.pc,则可以采用以下的方式来进行查看和调用该opencv版本:pkg-config --modversion opencv-3.1.0

pkg-config --cflags opencv-3.1.0 pkg-config --libs opencv-3.1.0

只是将pc文件进行了拷贝还不能确保,编译完成的代码在执行的时候能否正确链接到库,如果ldd编译完成的文件之后发现opencv的库not found时需要在/etc/ld.so.conf.d底下新建一个文件opencv.conf,

并将opencv的编译库路径放进去,例如:

/home/smile/opencv3.4.0/build/lib

然后sudo ldconfig,之后再去执行编译的文件就可以正常执行了; 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值