从去年开始写博客,到现在过了大半年,这段时间里写了两篇关于编译安装opencv的博客。
第一次是在虚拟机上安装的opencv2.4.9
第二次是在树莓派4B上安装opencv2.4.9
首先总结一下这两篇博文,第一篇虚拟机安装OpenCV2.4.9,最后可以安装成功,但是在这篇博文里面写了很多安装时的问题,很多都不是安装opencv的问题,而是解决一些环境的问题,比如像sudo apt-get update 时出错。这些都是基于内核x86的虚拟机所面对的问题,我觉得这些可能镜像源比较老的问题,真的是换源不对,安装啥都能出点问题。而且里面有些问题也都是写的不是很完善,不知道有的读者有没有疑惑(狗头保命)。第二篇则是在真正的ARM内核上安装opencv,和虚拟机不同,很多文件都是不一样的,在虚拟机可以编译,到了树莓派就不行了,还是因为内核问题以及源的问题。不过上述两种都是可以安装成功的,opencv图像处理起来都正常,但是进行不了视频处理,究其原因是因为当时在cmake指令时为了防止出错,把FFmpeg给OFF了。
现在就是要处理视频,那就必须给这个问题解决了,所以我就更新了今天的博客,在树莓派下安装编译opencv3.4.1,当然视频也是可以处理的。要说为什么不用opencv2.4.9版本呢,因为太老了,和镜像源不匹配,很多源文件编译错误,根据提示错误越改越多,索性放弃(依然记得拿着2.4.9版本去问人家被别人疯狂嫌弃)。
下面进入正题,我把我安装过程中的每一步都给说清楚,包括用到的镜像源也分享出来,防止有些问题是因为镜像源不匹配造成的。
首先拿到一个树莓派和TF卡,TF卡烧写官方的系统35inch-raspbian-buster.img。
进入系统后第一件事换源,打开命令终端输入下面两个sudo指令,把原先的注释掉,换成下面的。
sudo nano /etc/apt/sources.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspberry-pi-os/raspbian/ buster main non-free contrib rpi
sudo nano /etc/apt/sources.list.d/raspi.list
deb http://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main ui
换好源之后执行
sudo apt-get update
sudo apt-get upgrade
这样所需要的大环境就OK了,然后安装相关的第三方库,都是opencv需要的,不嫌多,就怕少,全给丫的装上。
sudo apt-get install build-essential cmake git pkg-config
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libjasper-dev
sudo apt-get install libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libdc1394-22-dev
sudo apt-get install libgtk2.0-dev
sudo apt-get install libgtk-3-dev
sudo apt-get install libavresample-dev
sudo apt-get install libgphoto2-dev
sudo apt-get install libopenblas-dev
sudo apt-get install libopencv-dev
sudo apt-get install libatlas-base-dev gfortran
sudo apt-get install libgstreamer-plugins-base1.0-dev
安装完成之后,如果担心后面的内存不够,可以先执行指令
sudo raspi-config
然后用方向键控制上下选择:Advancd Options -> Expand Filesystem,然后OK,重启一下
再次进入系统,可以进行opencv3.4.1的安装了。执行下面的指令下载源码,只要网不断,没有报错终止,就慢慢等,我当时是在晚上下的,第二天醒来就下好了,也不清楚多长时间。
wget -O opencv-3.4.1.zip https://github.com/Itseez/opencv/archive/3.4.1.zip
下载完成后得到一个opencv-3.4.1的zip文件
//解压文件
unzip opencv-3.4.1.zip
//进入解压出来的文件
cd opencv-3.4.1
//新建release文件
mkdir release
//进入release文件
cd release
到这里就可以进行cmake指令了,但是为了后面编译不会出错,这里先把问题解决掉,执行下面指令,防止编译找不到头文件。
sudo ln -s /usr/include/libv4l1-videodev.h /usr/include/linux/videodev.h
sudo cp /usr/include/opencv2/videoio/videoio_c.h /usr/include/arm-linux-gnueabihf/sys
sudo ln -s /usr/include/arm-linux-gnueabihf/sys/videoio_c.h /usr/include/arm-linux-gnueabihf/sys/videoio.h
执行完之后再打开文件进行相应修改,这里是一个源文件源码的问题
//安装gedit编辑器
sudo apt-get install gedit
sudo gedit /home/pi/opencv-3.4.1/modules/python/src2/cv2.cpp
打开文件后找到第885行附近做出如下修改
char* str=PyString_AsString(obj);前加上(char *),改为char* str=(char *)PyString_AsString(obj);
保存退出
sudo cmake -DCMAKE_BUILD_TYPE=RELEASE -DWITH_FFMPEG=ON -DWITH_LIBV4L=ON -DENABLE_PRECOMPILED_HEADERS=OFF -DCMAKE_INSTALL_PREFIX=/usr/local ..
执行结束后
//源码编译
sudo make
//安装
sudo make install
//配置路径
sudo ldconfig
这样就大功告成了,中间也不会出现错误。
如果还有问题的话,可以评论留言,一起讨论。