环境配置:Ubuntu+QT+opencv
唠叨两句:最近打算在windows10上的vs跑跑KCF算法,在git上下载的源码没能跑成功,查询了很多原因,最后总结出是因为windows上自带的头文件winnt.h与KCF源码有语句冲突,为了减少改代码的工作量,决定在ubuntu系统上配置opencv,方便后续开发。
已有的环境基础:Ubuntu18+QT5.1.2
QT的安装教程:
QT教程的安装很简单,这里就不废话了
参照下大佬的教程:https://blog.csdn.net/wuweifeng_2017/article/details/78322249
Opencv环境配置:
关于配置opencv我已经配置了一天半才能配置成功,我太难了,所以把配置过程中遇到的问题也分享。
网上的配置过程都大同小异,多多指点!
下载opencv软件包(zip格式)
两种方式:
方式一:官网下载:https://opencv.org/
方式二:命令行下载:wget https://github.com/opencv/opencv/archive/3.4.1.zip
注意:3.4.1是opencv的版本号,可根据自己的喜好选择版本号。
下载之后可进行解压文件夹:命令行解压:unzip 压缩文件包
解压完之后可以看到:
进入opencv-3.4.1文件夹中:命令行:cd opencv-3.4.1
可以看到:
可以看到很多子文件和文件夹,其中可以看到build这个文件夹是我手动创建的,我们接下来将在build这个文件夹中完成opencv的安装。
创建build文件夹:mkdir build
并且进入:cd build
在该文件夹下安装依赖项:
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
注意:由于依赖包较大,建议在网络较好的情况下安装,免得后面由于依赖包未安装完成没法配置成功,重新安装很麻烦,脑子会很乱。
一些安装完成之后,进入cmake,由于我的没有opencv的附加包opencv-contrib,所以cmake命令较为简单:
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
在cmake过程中可能会出现configuration incomplete,提示你安装失败,然后你重新cmake还是一样,而且这次错误的出现比往年来的更快,别慌,重新回到前面的依赖包安装。
保证依赖包全部下载完成之后!注意!在重新cmake之前,一定要把原来cmake产生的文件删除!
就是这个文件:
删除命令行:rm CMakeLists.txt
然后重新按照上述的cmake命令再来一次,基本就没啥问题了。
配置环境:
sudo sh -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
sudo ldconfig
最后:用QT测试:
进入QT:创建一个空项目,创建成功之后:
左上角会有个.pro文件,打开进行配置:
INCLUDEPATH += /usr/local/include \
/usr/local/include/opencv \
/usr/local/include/opencv2 \
LIBS += /usr/local/lib/libopencv_*.so
保存
最后,重启ubuntu系统,打开刚刚的项目,输入opencv的测试代码:
#include<iostream>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main()
{
Mat image;
image = imread("/home/iot/opencvDemo/untitled/timg.jpeg" ,2);//not 16bits or 32bits
if ( !image.data )
{
printf("No image data \n");
return -1;
}
namedWindow("Display Image", CV_WINDOW_AUTOSIZE );
imshow("Display Image", image);
waitKey(0);
return 0;
}
测试成功啦!