目录
- 一、系统配置
- 二、安装 OpenCV 依赖包
- 三、编译安装 OpenCV
- 四、使用示例——特效图片
- 五、使用示例——视频播放
- 六、总结
- 七、参考资料
本文章是使用 VNC viewer 打开树莓派,并进行配置,有关 VNC viewer 连接树莓派请参考博客:树莓派烧录系统且无显示器使用putty和VNC远程桌面连接
一、系统配置
第一步:系统版本信息查看
- 使用命令:
lsb_release -a
- 使用命令:
uname -a
- 使用命令:
cat /etc/deb
- 使用命令:
cat /etc/debian_version
第二步:设置开启摄像头
- 点击左上角草莓图标,再点击 Preferences ,然后点击 Raspberry Pi Configuration 。
- 在 interfaces 界面内将 Camera 栏勾选上 Enable ,再点击 OK 。
- 使用命令安装 fswebcam 。
注:
由于树莓派使用的是 USB 接口的摄像头,所以需要安装 fswebcam ,后续通过命令:sudo fswebcam image.jpg 来进行拍照。
sudo apt-get install fswebcam
第三步:配置视频流文件
- 使用命令:
sudo nano /etc/modules
- 最后一行添加
bcm2835-v4l2
- 添加完毕后,使用按 ctrl + x ,然后输入 y ,并按回车即可保存退出。
第四步:更改系统镜像源
更改镜像源请参考:Raspbian 中国软件源
- 我使用的是清华镜像源,好用。
- 更改软件软件源:
sudo nano /etc/apt/sources.list
- 更改系统源:
sudo nano /etc/apt/sources.list.d/raspi.list
二、安装 OpenCV 依赖包
第一步:安装numpy
- 使用命令安装numpy
NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。
sudo pip3 install numpy -i https://pypi.douban.com/simple/
第二步:系统C/C++编译环境
- 使用命令安装编译环境
sudo apt-get install build-essential cmake
第三步:安装图像工具包
- 依次使用下面的命令:
sudo apt-get install libjpeg8-dev
sudo apt-get install libtiff5-dev
sudo apt-get install libjasper-dev
sudo apt-get install libpng12-dev
第四步:安装视频I/O包
- 使用命令:
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
第五步:安装gtk2.0和优化函数包
- 使用命令:
sudo apt-get install libatlas-base-dev gfortran -y
sudo apt-get install libgtk2.0-dev -y
三、编译安装 OpenCV
第一步:下载 opencv
- 使用命令(下载速度很慢,耐心等待):
git clone -b 4.1.2 --recursive https://github.com/opencv/opencv.git
第二步:下载opencv_contrib
- 使用命令:
git clone -b 4.1.0 --recursive https://github.com/opencv/opencv_contrib.git
第三步:配置Cmake
- 使用命令:
cd /home/pi/openvcsrc/opencv-4.1.2
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_C_EXAMPLES=ON \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/openvcsrc/opencv_contrib-4.1.2/modules \
-D BUILD_EXAMPLES=ON \
-D WITH_LIBV4L=ON \
-D PYTHON3_EXECUTABLE=/usr/bin/python3.7 \
-D PYTHON_INCLUDE_DIR=/usr/include/python3.7 \
-D PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \
..
注:
注意,以上命令需要根据您具体的软件环境进行修改,否则很可能报错!!!
各条命令解析如下:
-D CMAKE_BUILD_TYPE=RELEASE \ 代表编译类型为发行版本
-D CMAKE_INSTALL_PREFIX=/usr/local \ 安装路径
-D INSTALL_C_EXAMPLES=ON \ C demo
-D INSTALL_PYTHON_EXAMPLES=ON \ Python demo
-D OPENCV_EXTRA_MODULES_PATH=/home/pi/openvcsrc/opencv_contrib-4.1.2/modules \ OpenCV Contrib路径
-D BUILD_EXAMPLES=ON \ 编译demo
-D WITH_LIBV4L=ON \ 开启Video for Linux
-D PYTHON3_EXECUTABLE=/usr/bin/python3.7 \ Python3路径
-D PYTHON_INCLUDE_DIR=/usr/include/python3.7 \ Python3 include文件夹
-D PYTHON_LIBRARY=/usr/lib/arm-linux-gnueabihf/libpython3.7m.so \ Python3库
-D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3/dist-packages/numpy/core/include \ Python3 Numpy安装路径
第四步:编译
- 使用命令开始编译。
此命令为单线程编译,若使用多线程编译会容易断,单线程稳定,你若想使用多线程,可以使用命令 make -j4(4线程编译),j 后面的表示线程的数量。
sudo make
第五步:安装
- 使用命令:
sudo make install
第六步:刷新系统动态链接库
- 使用命令:
sudo ldconfig
四、使用示例——特效图片
第一步:创建C++文件
- 使用命令:
nano test1.cpp
- 输入以下代码:
#include <opencv2/highgui.hpp>
#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
CvPoint center;
double scale = -3;
IplImage* image = cvLoadImage("lena.jpg");
argc == 2? cvLoadImage(argv[1]) : 0;
cvShowImage("Image", image);
if (!image) return -1; center = cvPoint(image->width / 2, image->height / 2);
for (int i = 0;i<image->height;i++)
for (int j = 0;j<image->width;j++) {
double dx = (double)(j - center.x) / center.x;
double dy = (double)(i - center.y) / center.y;
double weight = exp((dx*dx + dy*dy)*scale);
uchar* ptr = &CV_IMAGE_ELEM(image, uchar, i, j * 3);
ptr[0] = cvRound(ptr[0] * weight);
ptr[1] = cvRound(ptr[1] * weight);
ptr[2] = cvRound(ptr[2] * weight);
}
Mat src;Mat dst;
src = cvarrToMat(image);
cv::imwrite("test.png", src);
cvNamedWindow("test",1); imshow("test", src);
cvWaitKey();
return 0;
}
- 编写完后,保存。
第二步:准备图片
- 在 test1.cpp 同文件夹下准备一个照片,命令为:lena.jpg
第三步:开始编译
- 使用命令:
g++ test1.cpp -o test1 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -loencv_imgcodecs
第四步:运行
- 使用命令:
./test1
五、使用示例——视频播放
第一步:创建C++文件
- 使用命令:
nano test2.cpp
- 编写如下代码进去。
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
//从摄像头读取视频
VideoCapture capture("man.mp4");
//循环显示每一帧
while(1){
Mat frame;//定义一个Mat变量,用于存储每一帧的图像
capture >> frame;//读取当前帧
if(frame.empty())//播放完毕,退出
break;
imshow("读取视频帧",frame);//显示当前帧
waitKey(30);//掩饰30ms
}
system("pause");
return 0;
}
- 编写完毕后保存。
第二步:准备视频
- 在 test2.cpp 同文件夹下准备一个照片,命令为:man.mp4
第三步:开始编译
- 使用命令:
g++ test2.cpp -o test2 -L/usr/local/lib -lopencv_core -lopencv_imgproc -lopencv_highgui -loencv_imgcodecs
第四步:运行
- 使用命令:
./test2
六、总结
树莓派安装 opencv 的过程有点繁杂,尤其是配置各种工具包,在下载安装包和 make 编译的情况下,速度太慢了,这一点确实很烦人,可以百度一下国内的镜像站点下载安装包,不过编译这个情况就没办法改善了,毕竟树莓派就那么大,没有笔记本这么强悍。
七、参考资料
1、树莓派编译安装OpenCV 2、【嵌入式】Windows10&Ubantu16.04&树莓派3B+安装opencv教程