血泪史——虚拟机中linux系统安装opencv2.4.9

捣腾了好几天时间,终于让opencv2.4.9在linux上安家落户了,因此写下此篇博客给那些像我一样的linux小白一丢丢的参考和建议,因为前后时间确实长了些(大佬略过),所以很多错误不能用界面来给大家显示,只能尽我所能向大家描述我遇到的错误,不过我之前在txt中做过笔记错误我都记录下来,如果是相同的错误,大家很容易就可以找到。下面就开始吧。

首先介绍我所使用的虚拟机版本和装载的系统

虚拟机:VMware W-14.1.1

系统:树莓派Debian-amd64(64位linux系统)

因为linux是吃版本的,所以版本不同错误可能就不一样,如果对于安装的系统没有太多要求,可以安装和我一样的系统,这样可以让错误对号入座。系统安装参考我之前的一篇博客,写的还算详细。https://blog.csdn.net/yuan123890/article/details/107607400

准备工作做好后就开始安装opencv了。

一、首先要执行的是如下几条指令

sudo raspi-config   // 进入后打开摄像头、SSH
sudo apt-get update
sudo apt-get upgrade
sudo rpi-update

第一行指令是打开系统的相关设置界面,我看了不同版本的目录有些区别,本次使用的系统是有一个SSH选项,直接enter进去,enable就行了,这条指令是打开树莓派的摄像头操作,由于是虚拟机所以这个就是个流程,然后就是检查更新并升级,由于这里提到了这两条指令,就先说一个错误吧(这个错误是我在后面update时遇到的)

a.错误:关键显示为“NO_PUBLIC_KEY UGFEDCGB7854(这里是随便打的一串数字字母)”,大概就是更新时缺少秘钥

   解决:输入指令

sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 5543141274TGGY//所缺失的秘钥

二、安装opencv所需要的工具包

sudo apt-get install libgtk2.0-dev
sudo apt-get install libavcodec-dev
sudo apt-get install libavformat-dev
sudo apt-get install libswscale-dev
sudo apt-get install libtiff-dev

这里要注意的一点就是安装libtiff-dev,我在网上搜的工具包很多人都说是安装libtiff4-dev,但是我安装4版本时出现了一个问题直接提示我用libtiff-dev替换,所以就换成了提示版本,这里就不当做错误了,所问题的时候可以从提示信息中找出解决方法。 

我在安装这五个包的时候基本上没有问题,但是除了这五个以外还有一个比较难以安装的包,如下所示

sudo apt-get install libjasper-dev

如果执行上面的指令没有问题那就最好,但是我在安装的时候出了问题

b.错误:提示信息显示unable to locate package,大意为找不到包,无法定位

   解决:这个错误解决和源有关系,因此要换源。

我下面把我换过的源都列出来,第一个源是清华源,但是行不通,有需要的可以更换,现在我把自己的流程都列出来,首先要执行指令

sudo nano /etc/apt/sources.list

执行完之后出现一个界面就是有多行deb开头的源地址,把里面所有的deb用#注释掉,加上下面的源

deb http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi

之后ctrl+x退出,输入Y,保存

同样输入下面指令

sudo nano /etc/apt/sources.list.d/raspi.list

同样的方法,注释后加入下面的源

deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
deb-src http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui

以上就换源成功了,换的是清华源,接着

sudo apt update
sudo apt upgrade

执行完之后再次sudo apt-get install libjasper-dev,发现不行,于是又换了个中科大的源,我下面把指令和源都列出来,添加方法和上面一样。

sudo nano /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

再次执行sudo apt update && upgrade,这时出现了一个错误

c.错误:最后提示 Sub-process /usr/bin/dpkg returned an error code

   解决:执行如下指令

sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bk
sudo mkdir /var/lib/dpkg/info
sudo apt-get update
sudo apt-get install -f
sudo mv /var/lib/dpkg/info /var/lib/dpkg/info.bk
sudo rm -rf /var/lib/dpkg/info
sudo mv /var/lib/dpkg/info.bk /var/lib/dpkg/info
sudo apt-get install libjasper-dev//libjasper-dev     //安装成功

 几个dev的安装就解决了,当时我是换了中科大的源之后解决这个错误,可能安装清华源的时候按照这种方式就可以,但是我没有试,如果安装完清华源就出现了上述错误可以这样解决。

三、安装编译opencv2.4.9

首先要下载OpenCV2.4.9的包,下载网址为

http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download opencv-2.4.9.zip

下载的指令如下

wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.9/opencv-2.4.9.zip/download opencv-2.4.9.zip

也可以直接在linux下的浏览器下载,下载好之后解压,可以右击解压,也可以指令解压。

解压完成之后,计入解压文件的目录,执行如下指令

cd opencv-2.4.9
mkdir release
cd release
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 WITH_QT=ON -D WITH_OPENGL=ON ..

下面就要解决这里的问题了,下面为可能出现的问题。

d.问题:cmake command not find,找不到cmake指令

   解决:sudo apt-get install cmake

这里可能发现找不到cmake的包,下面提供两种解决方案及出现的问题,我用的是第二种方式。

下载压缩包,网址:https://cmake.org/download/
tar zxvf cmake-********.tar.gz(后缀为.xz使用-xvf)
ln -s /usr/cmake-********/bin/* /usr/bin/(创建软连接安装成功)
cmake -version     //查看版本

下载压缩包,网址:https://cmake.org/download/
tar zxvf cmake-********.tar.gz
cd 进入解压好的文件夹
./configure(错误:找不到OpenSSL 解决:在cmake解压目录下文件夹中打开CMakeLists.txt,首行添加set(CMAKE_USE_OPENSSL OFF) )
make
sudo make install
cmake -version     //查看版本

e.错误:提示信息大意是找不到qt的相关文件,显示多组QT*******.cmake找不到

   解决:在上述执行的cmake指令中,找到-D WITH_QT=ON改为-D WITH_QT=OFF。再次执行

f. 错误:找不到头文件stdlib.h

   解决:在cmake指令最后加上_PRECOMPILED_HEADERS=OFF,再次编译。

执行完cmake之后,再执行如下

sudo make install

g.错误:error**will be never beNULL,显示****不会为空

   解决:进入release/modules/contrib/CMakeFiles/opencv_contrib.dir/flags.make文件中删除-Werror=address,再执行。

上面都正常之后接着执行下面的指令

sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'   //配置路径
sudo ldconfig    //更新路径

这样opencv2.4.9就安装好了。

四、编译运行

找到一个目录新建一个cpp文件,并且有gedit进行编译,指令如下,这里将cpp文件取名为test。

sudo gedit test.cpp

这里可能会出现错误,提示gedit找不到命令,那么就执行下面的指令

sudo apt-get install gedit

这里有可能会出现找不到包或者包已经损毁的情况,那就只能下载编译安装了,和前面的cmake一样,可能出现的错误也列在里面,这里用到aptitude,要注意和apt-get一样用于安装,但是aptitude用于降级安装,找不到指令的话就sudo apt-get install aptitude

下载包网址:https://download.gnome.org/sources/gedit/3.37/
tar -xvf gedit-3.37.3.tar.xz    //解压
sudo apt-get install gedit(提示缺失依赖项换用sudo aptitude install gedit,直到遇到The following actions will resolve these dependencies:选择Y,其他都选n)
gedit --version     //查看版本

安装好之后执行sudo gedit test.cpp

写入如下代码并保存,在test.cpp同级目录下要先保存好一张jpg的图片,我这里取名为1.jpg。

#include <cv.h>  
#include <highgui.h>  
using namespace cv;   
int main()  
{  
    Mat image;  
    image = imread("1.jpg");  
    namedWindow("Display Image", CV_WINDOW_AUTOSIZE);  
    imshow("Display Image", image);  
    waitKey(0);  
    return 0;  
}

在同目录下新建CMakeLists.txt文件写入如下的内容,这里所有的test都是可变,cpp文件名叫什么这里就叫什么,因为这里用的是test.cpp,所以都是test。

project(test)  
find_package(OpenCV REQUIRED)  
add_executable(test test)  
target_link_libraries(test ${OpenCV_LIBS})  
cmake_minimum_required(VERSION 2.8)

 写完保存,再执行

sudo cmake .
sudo make     //得到可执行文件

在目录下执行ls指令,可以看到可执行的文件,如下所示,绿色的test就是生成的可执行文件。

接下来最后一步,执行

./test

 屏幕上就显示了之前保存为1.jpg的图片。

这下就大功告成啦。

如果能够帮助到有需要的人也是非常开心的,一起学习,一起加油。fighting!!! 

猜你喜欢

转载自blog.csdn.net/yuan123890/article/details/107755974
今日推荐