PS:开始先在公司内网服务器上尝试安装OpenCV,但是很多命令需要root特权权限、普通用户无法执行。所以这条路就放弃了(在服务器上安装请参考其他博文~),直接就在本地主机上安装了(但是道路依旧十分曲折,仿佛每一步都有问题,花了好几天…)。
参考:Linux环境下OpenCV的安装与配置
方式1:
sudo apt install gcc
sudo apt install g++
方式2:安装build-essential,安装了该软件包,编译c/c++所需要的软件包也都会被安装
sudo apt install build-essential
搜索“软件和更新”:
更换“更新源”:ubantu默认国外的源,经常用还是换国内的:清华的、中科大的、华为云、阿里云等等都可以,选择一个你熟悉的,这里用的中科大的:
步骤:将下面四个橙色的对钩打上;“Download from”选择other–china–ustc中科大的源;弹出的验证框输入user的密码;右下角Close–Restore(等待一两分钟)
update界面如下:Close-Restore
1.打开终端,将sources.list文件备份 sudo cp /etc/apt/sources.list /etc/apt/sources.list.old
2.打开sources.list文件,可以用你熟悉的任何文字编辑器–vim,gedit,atom等都可以
sudo -i
(我的sources是只读文件,所以用特权)
sudo gedit /etc/apt/sources.list
所有内容为中科大的源(其他源见参考网址)
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
退出root : exit
3.复制完后,保存退出。然后别忘了更新缓存。
输入:sudo apt-get update
安装libgtk,GTK(GIMP Toolkit)是一个Linux平台下基于Xwindow图形窗口的图形用户编程接口工具,可以借助它来开发Linux平台下基于Xwindow的图形用户界面。
sudo apt install libgtk2.0-dev
安装pkg-config
sudo apt install pkg-config
安装ffmpeg,ffmpeg(命令行工具) 是一个快速的音视频转换工具。
sudo apt install ffmpeg
安装libavcodec-dev
sudo apt install libavcodec-dev
安装libavformat-dev
sudo apt install libavformat-dev
安装libswscale-dev
sudo apt install libswscale-dev
根据实际需要,选择性安装libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev等(这里我出错了,有些包找不到,也不需要用就没安装)
sudo apt install libjpeg-dev, libpng-dev, libtiff-dev, libjasper-dev, libdc1394-22-dev libtbb2 libtbb-dev libdc1394 2.x CUDA Toolkit 6.5
1.网址不通:按照1.准备工作步骤进行更新源的选择和配置;更换网络代理(根据需要自己选择路径端口号);还有其他方法和原因记不清了…
2.一些包找不到–没用到那些包,这个问题没管,以后用的再说。
官网安装需要的版本:https://opencv.org/releases/
这里用的是3.4.2,版本不同安装和使用差异大,出错也会各不相同,建议怕麻烦用推荐即可。
解压到自建的路径下:
进入编译目录:
cd build
进行cmake-make编译:
cmake ..
make -j2 //电脑核数不够直接-j
1.cmake不成功,有的博文给的cmake命令很长:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_GTK=ON -D WITH_OPENGL=ON ..
2.CMakeLists.txt文件没找到。未解决。
若是以上问题解决不了,就按照上述方法一步步仔细核对进行,失败直接把build删除重新弄就行。
1.进入root权限(不然我遇到的问题是文件只能读,不能改),在终端输入:没有vi可以去图形界面手动找这个文件夹
sudo -i
vim /etc/ld.so.conf.d/opencv.conf
添加已以下内容:
sudo ldconfig
生效
2.终端输入:vim /etc/bash.bashrc
,进入bash.bashrc文件,在尾行添加
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig export PKG_CONFIG_PATH
4.检查是否配置成功:pkg-config opencv --modversion
终端输入:ldconfig -v | grep opencv
。
任意目录创建一个工作目录A(我的是mywork)便于自己记住和管理。
#include
int main()
{
cv::Mat image = cv::imread("/home/user/opencv/opencv-3.4.2/myWork/1.jpg", cv::IMREAD_COLOR);
cv::imshow("test",image);
cv::waitKey(0);
return 0;
}
CMake文件的文件名CMakeLists.txt有严格的大小写要求,注意不要写错。
cmake_minimum_required(VERSION 2.8)
project( DisplayImage )
find_package( OpenCV REQUIRED )
add_executable( DisplayImage 1.cpp )
target_link_libraries( DisplayImage ${OpenCV_LIBS} )
1.设置cmake要求的最低版本号;
2.工程名称:一会编译后在build下面生成这个名字的可执行文件。
PROJECT(projectname [CXX] [C] [Java])
你可以用这个指令定义工程名称,并可指定工程支持的语言,支持的语言列表是可以忽略的;
这个指令隐式的定义了两个cmake变量:_BINARY_DIR以及_SOURCE_DIR。前者指构建路径,后者指工程路径,即CMakeLists.txt所在的路径。
同时cmake系统也帮助我们预定义了PROJECT_BINARY_DIR和PROJECT_SOURCE_DIR变量,他们的值分别跟opencv_test_BINARY_DIR与opencv_test_SOURCE_DIR一致。
为了统一起见,建议以后直接使用PROJECT_BINARY_DIR,PROJECT_SOURCE_DIR,即使修改了工程名称,也不会影响这两个变量。如果使用了_SOURCE_DIR,修改工程名称后,需要同时修改这些变量。
3.很重要的指令:find_package
这个指令以被用来在系统中自动查找配置构建工程所需的程序库。在linux和unix类系统下这个命令尤其有用。CMake自带的模块文件里有大半是对各种常见开源库的find_package支持,支持库的种类非常多。
当它找到OpenCV程序库之后,就会帮助我们预定义几个变量,OpenCV_FOUND
、OpenCV_INCLUDE_DIRS
、OpenCV_LIBRARY_DIRS
、OpenCV_LIBRARIES
,它们分别指是否找到OpenCV,OpenCV的头文件目录,OpenCV的库文件目录,OpenCV的所有库文件列表。
4.add:这个命令很好理解,首先是可执行文件的名字,然后是源码的名字。
这个命令一定要在TARGET_LINK_LIBRARIES
之前使用。
5.用来设置需要的库文件:
TARGET_LINK_LIBRARIES(target library1<debug | optimized> library2...)
其中的target就是前面设置生成的目标文件(可执行文件).
6.其他没用到:
include_directories(${OpenCV_INCLUDE_DIRS})
设置包含的头文件的路径
link_directories(${OpenCV_LIBRARY_DIRS})
设置库文件的路径
CMakeLists.txt介绍完毕。
1.进入A文件目录;
2.新建一个编译目录
mkdir build
ps:注意如果是刚刚执行编译了,重新编译要先手动清空build中的东西,不然报错。
3.进行cmake-build编译,100%就成功。然后build目录下面出现了很多文件。
cmake ..
make
4.目录不动,执行build里面的可执行文件:
./DisplayImage
5.如图界面:执行成功后会蹦出一个窗口test,显示"1.jpg图像"。