本篇教程不是最优解,建议查看Ubuntu配置OpenCV并在qt运行
本教程是对实验室前组长所写教程的简化和小版本更新,增加了一些意外错误的处理方式,但减少了原理的描述,建议比较这看一下。
软件使用的是VMware Workstation 16 Pro,Ubuntu20.04镜像从官网下载。第一步安装虚拟机,暂时略过,建议选择典型安装,网络选择NAT模式,磁盘建议使用单个磁盘安装,这样性能好。下面从开机开始
1.首次使用初始化.
2.安装OpenCV.
3.安装QTcreator.
4.在Ot中测试OpenCV.
1. 首次使用初始化
-
设置中文(English good 忽略):桌面右击 -> settings->Region & Language -> Manage Install Languages ->Install/Remove Languages… ->找到Chinese(simplified),选中 -> Apply ,输密码下载->找到下载的中文,拖动到最上面(就再刚刚的界面找到),close -> 重启电脑。
-
画面太小,可以在设置里调解分辨率:settigs->Displays,自己尝试调。
-
换源(为了更快更稳定下载):设置->最下面有一个about->最下面有一个software updates 点击Download From后面选项框换源(默认是US,换成中国的某个源,选择之后要重新载入)
-
打开终端,如果一直显示:To run a command as administrator (user “root”), use “sudo ”. See “man sudo_root” for details.
解决方案:终端输入:
touch ~/.sudo_as_admin_successful
,回车。 -
没有安装VMwar tools(可以点VM软件击左上角-虚拟机,如果重新安装VMware Tools是灰色的,代表没安装,这个工具主要作用是实现虚拟机和原来系统之间的文件拖拽和复制粘贴(不过现在复制粘贴貌似也不需要VMware tools了),如果没安装那就不安装了(因为我也不会),直接在Ubuntu里面的浏览器里面搜索教程复制命令吧!(这个文章我也考虑会发到优快云里,到时候可以搜索我的ID:myc1338,虽然我以前什么文章都没发过。至于文件传输,可以自己学习一下FileZilla这个软件,实现win和linux虚拟机之间传输文件。
-
浏览器无法搜索,可能是搜索引擎不对,谷歌国内不好用,建议换成bing(浏览器设置->搜索引擎)。
-
有关复制用法:终端里鼠标长按滑过自动复制,可以通过单击鼠标中键进行粘贴,浏览器复制需要使用右键粘贴,关于使用过得命令命令可以使用箭头(数字小键盘左边那个)回溯。
-
安装中文输入法:在浏览器中搜索搜狗拼音输入法,下载linux个人版 x86_64,下载后会转跳到一个安装教程界面,跟着做即可。
2. 安装OpenCV
此安装方法也适用与安装OpenCV4(可能),至于为什么安装3.4.14版本,因为我们现役代码是这个版本的OpenCV跑的。
-
安装依赖项
sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential sudo apt-get install build-essential cmake
安装完后使用
g++ -v
查看g++是否安装成功
-
安装OpenCV依赖(下面这么长是一个命令)
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libatlas-base-dev gfortran libgtk2.0-dev libjpeg-dev libpng-dev
-
编译安装OpenCV
-
下载OpenCV,下载Sources版本,使用浏览器提供zip相关工具直接解压至自己喜欢的目录(我直接放在home目录下)。
-
打开下载的OpenCV文件夹,右击进入终端或者使用ALT+Ctrl+T,依次执行以下命令
mkdir build cd build
这里创建build文件夹专门放置编译后的文件
-
编译OpenCV
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. sudo make -j8 sudo make install
依次执行以上命令,第二条-j8代表使用八个线程同时编译,这个根据自己情况自选,编译时间很长,耐心等待,如果编译时卡死也没事,重启虚拟机可以直接执行sudo make -j8继续上次编译。
-
环境配置
-
执行命令
sudo gedit /etc/ld.so.conf.d/opencv.conf
,打开一个文件,加上/usr/local/lib
保存,再执行sudo ldconfig
刷新。 -
执行命令
sudo gedit /etc/bash.bashrc
,会打开另一个文件,添加以下两行语句保存PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
执行
source /etc/bash.bashrc
,刷新。 -
执行
sudo updatedb
。这里大概会出错:sudo: updatedb: command not found
可以通过依次执行
sudo apt-get install mlocate
和sudo updatedb
两个命令解决。
-
-
验证安装
我们通过编写(cv)程序确认:随便在一个地方建一个文件夹并保存一张图片在此文件夹中并取名为test.jpg,我图片是从浏览器中获取的。进入文件夹唤出终端,因为这样终端会定位到此文件夹,然后依次执行
touch CMakeLists.txt
和touch main.cpp
,会创建两个文件。在CMakeLists.txt文件中复制以下内容:
是否是
cmake_minimum_required(VERSION 2.6) #创建工程 project(testopencv) #C++版本为11 set(CMAKE_CXX_FLAGS "-std=c++11") find_package(OpenCV REQUIRED) #找OpenCV 安装路径 include_directories(${OpenCV_INCLUDE_DIRS}) #加载OpenCV的头文件 add_executable(testopencv main.cpp) #将程序生成可执行文件 target_link_libraries(testopencv ${OpenCV_LIBS}) #链接lib文件到可执行文件中
在main.cpp文件复制以下内容:
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //声明使用OpenCV的命名空间 int main(int agrc, char** agrv) { Mat img=imread("test.jpg"); imshow("test",img); waitKey(0); }
再次回到终端,一次执行
cmake .
和make
命令进行编译,编译成功后执行./testopecv
就可以打开你刚刚保存的图片。若以上都执行成功,则安装OpenCV成功!
-
3. 安装QTcreator
-
执行以下命令安装qt:
sudo apt install qtcreator sudo apt install libqt5gui5 libqt5core5a libqt5dbus5 qttools5-dev qttools5-dev-tools sudo apt-get install qt5-default
执行
qmake -v
若是会显示版本和路径,则代表安装完成。 -
我遇到的bug:安装QT后,我尝试在一个空项目中编码输出一个helloWorld,没想到刚写完
#include <iostream>
就报错了,但继续编码且程序最后却运行了。QT最上面提示了the code model could not parse an included file…我查了一下是头文件包含有关的问题,解决方案是:帮助–>关于插件–>C+±->ClangCodeModel的勾去掉即可,然后重启QT。
4. 在QT中测试OpenCV
注意:如果使用OpenCV4以上版本,则无法使用环境变量的方法,需要手动添加库文件,建议自行学习。
-
打开QT->新建项目->其他项目->Empty qmake Project。在此项目所在文件夹中加入一张名为
test.jpg
的图片。 -
在工程文件中写入以下内容并保存
#Libraries CONFIG += link_pkgconfig #OpenCV PKGCONFIG += opencv #C++14 CONFIG += c++14
-
添加C++源文件,写入以下内容并保存
#include <iostream> #include <opencv2/opencv.hpp> using namespace std; using namespace cv; //声明使用OpenCV的命名空间 int main(int agrc, char** agrv) { Mat img=imread("test.jpg"); imshow("test",img); waitKey(0); return 0; }
-
点击左下角绿色三角形,运行程序,此时出现图片则成功。
5. 写在最后
难得配环境成功,心血来潮,写点东西记录一下。大学之前没接触过编程,也从来没使用过linux,更没有在linux里面配置过环境,不过在阴差阳错加入实验室后,发现配环境是必须做的第一件事,因为没参加过竞培营,所以在大一暑假才开始了配环境之路,当时什么都不懂,稍微了解了一些linux知识后就跟着我们老组长szq写的博客配环境,由于不懂原理,只能照葫芦画瓢,其过程不可谓不艰难,我依稀记得我一大早爬起来配环境一直搞的晚上都没结束甚至拒绝了好友的游戏邀请。大概前前后后配了三天都没好,当时系统重装了不下十次,心态崩了更是无数次,终于不知道为什么突然成功了一次。后来就一直用那次安装好的Ubuntu16.04配置的环境学习实验室相关代码,中间有尝试过配置其他版本的环境了,后来都失败了,时间长了也就不了了之了。这次培训,我又想尝试配一次Ubuntu20.04,试图搞懂一些原理,结果又来来回回失败好几次,好在到晚上终于是成功了,这大概也是之前很长时间配环境留下来的经验吧。直到现在,我依旧搞不懂为什么qt找不到OpenCV路径和无法正确的连接库的问题,如果有大佬看到,请教教我。总之,配环境这个玄学的东西,还是得有耐心,而且在解决一个个问题时,自身也能有很大提升。