不过由于常用的深度学习库如,caffe,tensorflow往往依赖库中有opencv-dev,python-opencv-dev等,不装吧,这些库极有可能运行不了。 @H_404_0@所以解决opencv版本冲突问题,对我们在ubuntu上编写程序,使用深度库都是很有帮助的。 @H_404_0@好了,废话不多说。下面进入正题。
以一个qt小程序为例:
#include <QCoreApplication>
#include "opencv2/opencv.hpp"
#include "opencv2/gpu/gpu.hpp"
int main(int argc,char *argv[])
{
QCoreApplication a(argc,argv);
cv::Mat src_image = cv::imread("/home/cvrsg/JpHu/ProgramLibrary/untitled/lena.jpg");
cv::Mat dst_image;
cv::gpu::GpuMat d_src_img(src_image);
cv::gpu::GpuMat d_dst_img;
cv::gpu::cvtColor(d_src_img,d_dst_img,CV_BGR2GRAY);
d_dst_img.download(dst_image);
cv::namedWindow("test",0);
cv::imshow("test",dst_image);
cv::waitKey(0);
return a.exec();
}
@H_404_0@错误: 这个小程序利用了gpu版的opencv。而一般系统自带的opencv是没有编译gpu模块的。
如果我们不解决版本问题,编译同样能成功,不过运行时则会报错。
解决:
(1)我们寻找问题的原因。
从上面我们也看到程序找到的opencv库是2.4.8版的(我自己编译的库是2.4.13版的)
明显链接版本发生冲突啦。
(2)我们进一步查找问题的来源。
由于,我们的程序编译成功,会生成可执行文件。根据这个可执行文件,我们可以找到其相应的依赖库
$cd {HOME}/build-untitled-Desktop-Debug #{HOME}表示用户根目录
$ldd untitled | grep opencv #查找与opencv相关的链接
@H_404_0@得到 进入/usr/lib/x86_64-linux-gnu/,我们发现这里opencv的版本为2.4.8,也就证实了程序确实是链接到了低版本的opencv。
(3)修改ld.so.conf.d(优先级较高)
$sudo vim /etc/ld.so.conf.d/libopencv.conf
@H_404_0@添加一行
/usr/local/lib
@H_404_0@执行动态链接库更新
$sudo ldconfig
@H_404_0@再次编译qt程序,
$ldd untitled | grep opencv #查找与opencv相关的链接
@H_404_0@程序找到正确opencv路径: 终端运行得到结果
@H_404_0@如果仍有错误,可考虑将相应*.so文件放入debug或release目录下。 @H_404_0@仍然存在的问题 程序能在终端运行。但是qt运行还是有问题。有知道答案的博友,请告知。