首先声明,我是在树莓派4B全新安装的,之前没有安装过旧的opencv。使用的树莓派镜像是
2021-10-30-raspios-bullseye-armhf.img 这个镜像,刚安装好CMake。安装cmake的步骤简单说下:
下载了cmake源码包后,就是在终端运行以下几个命令:
mv /home/pi/Downloads/cmake-3.22.0.tar.gz /home/pi/cppProjects/cmake_src/
sudo apt install openssl libssl-dev
tar -zxvf cmake-3.22.0.tar.gz
cd cmake-3.22-0
./bootstrap
make
sudo make install
在树莓派安装OpenCV有些复杂,网上也有很多种安装OpenCV的方法,比较混乱。经过我的搜索和梳理,找到了一种比较简单的安装方法,网址为:
https://qengineering.eu/install-opencv-4.5-on-raspberry-pi-4.html
大家最好先看看上面这个网页。我也是完全按照它的建议,从github下载他提供的安装脚本安装的。直接按照上面网页的步骤做即可。首先要更改GPU Memory, 然后要更新树莓派的EEPROM。接着作者说了不要在python的PIP中安装opencv等,确实都是好建议。
然后我们要运行unname -a确认下当前是64位系统还是32位系统。经过我的验证,我下载的2021-10-30-raspios-bullseye-armhf.img 这个镜像是32位系统。因此可以直接运行作者提供的shell脚本程序。接下来关键的一步是要设置Swap memory,因为opencv很吃内存,编译过程要占用很大内存,必须要多提供些硬盘空间用于临时内存。按照作者的要求修改 /sbin/dphys-swapfile文件。下面最后一行有2048那个就是文件要修改的地方。
restrict size (computed and absolute!) to maximally this limit
can be set to empty for no limit, but beware of filled partitions!
this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
but is also sensible on 64bit to prevent filling /var or even / partition
CONF_MAXSWAP=2048 --------> 2048改成4096。
然后重启系统。
接着去作者的github网站下载他的shell脚本文件:
https://github.com/Qengineering/Install-OpenCV-Raspberry-Pi-32-bits
下载了该资料库后。
下载后如上图。随便挑一个比如将OpenCV-4-5-0.sh文件用WinSCP拷贝到树莓派中,在终端直接运行下面两句即可:
$ sudo chmod 755 ./OpenCV-4-5-0.sh
$ ./OpenCV-4-5-0.sh
一个shell脚本,完成了60多个指令,这就是shell脚本程序的好处。安装CMake的过程也可以使用类似的shell脚本来实现,省去了打字的麻烦!注意,为了加快速度,我没有使能QT功能,大家有需要自己修改OpenCV-4-5-x.sh脚本即可。
整个opencv安装过程大约一个半小时。安装完成后的截图如下,你会看到
Congratulations!
You’ve successfully installed OpenCV 4.5.0 on your Raspberry Pi 32-bit OS
这两句话,代表安装完毕了!
最后修改 /sbin/dphys-swapfile文件。将CONF_MAXSWAP=4096改回成2048。
restrict size (computed and absolute!) to maximally this limit
can be set to empty for no limit, but beware of filled partitions!
this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it
but is also sensible on 64bit to prevent filling /var or even / partition
CONF_MAXSWAP=4096 --------> 4096改成2048
找到了这篇文章,的确大大降低了安装难度。大家可以看看这位CSDN朋友的安装过程:
https://blog.csdn.net/qq_42642142/article/details/112474678
复杂得多,实际上就是将脚本程序一步一步地执行。不过经过这么折腾和总结,我相信他的软件水平也会提高不少呢!
二、验证OpenCV的安装
1、使用Python验证
如下:
import cv2
print(cv2.version)
截图如下:
从上图可知我刚安装的opencv版本是4.5.0。
2、做一个OpenCV C++小程序验证OpenCV的C++接口
打开我之前做的opencv验证小程序,ch2_1
打开第一个CmakeLists.txt,如下:
cmake_minimum_required (VERSION 3.0)
cmake_policy(SET CMP0012 NEW)
PROJECT(Ch2_1)
find_package(OpenCV REQUIRED)
message(" opencv version: ${OpenCV_VERSION}")
include_directories(${OpenCV_INCLUDE_DIRS}) # Not needed for CMake >= 2.8.11
ADD_EXECUTABLE( sample1 sample1.cpp )
TARGET_LINK_LIBRARIES(sample1 ${OpenCV_LIBS})
我在第六行添加了一个message可以看到当前的opencv版本号。
第二个文件就是图像处理领域大名鼎鼎的lena头像了。大家随便找个图就行。我还是把图贴上吧…
第三个sample1.cpp文件也很简单,就是将彩色图转换成灰度图,并在终端显示指定位置的像素值。
sample1.cpp文件如下:
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
// OpenCV includes
#include "opencv2/core.hpp"
#include "opencv2/highgui.hpp"
using namespace cv;
int main( int argc, const char** argv )
{
// Read images
Mat color= imread("../lena.jpg");
Mat gray= imread("../lena.jpg", IMREAD_GRAYSCALE);
if(! color.data ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
// Write images
imwrite("lenaGray.jpg", gray);
// Get same pixel with opencv function
int myRow=color.cols-1;
int myCol=color.rows-1;
auto pixel= color.at<Vec3b>(myRow, myCol);
cout << "Pixel value (B,G,R): (" << (int)pixel[0] << "," << (int)pixel[1] << "," << (int)pixel[2] << ")" << endl;
// show images
imshow("Lena BGR", color);
imshow("Lena Gray", gray);
// wait for any key press
waitKey(0);
return 0;
}
用WinSCP把ch2_1文件夹拷到树莓派中,然后在终端运行下列命令:
$mkdir build; cd build
$cmake …/
$cmake --build .
$./sample1
下面的截图就是运行情况:
从上图可看到CMake检测到了opencv的版本为4.5.0
运行sample1文件后,当正常看到了两张美丽性感的Lena图后,代表opencv的C++接口也可以正常使用了。
至此,opencv4.5.0就成功安装到树莓派上了。