目录

  • 一、系统配置
  • 二、安装 OpenCV 依赖包
  • 三、编译安装 OpenCV
  • 四、使用示例——特效图片
  • 五、使用示例——视频播放
  • 六、总结
  • 七、参考资料


本文章是使用 VNC viewer 打开树莓派,并进行配置,有关 VNC viewer 连接树莓派请参考博客:树莓派烧录系统且无显示器使用putty和VNC远程桌面连接

一、系统配置

第一步:系统版本信息查看

  • 使用命令:
lsb_release -a

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_python

  • 使用命令:
uname -a

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_怎么看树莓派opencv摄像头多少帧_02

  • 使用命令:
cat /etc/deb

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_python_03

  • 使用命令:
cat /etc/debian_version

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_python_04


第二步:设置开启摄像头

  • 点击左上角草莓图标,再点击 Preferences ,然后点击 Raspberry Pi Configuration 。

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_opencv_05

  • 在 interfaces 界面内将 Camera 栏勾选上 Enable ,再点击 OK 。

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_OpenCV_06

  • 使用命令安装 fswebcam 。

注:由于树莓派使用的是 USB 接口的摄像头,所以需要安装 fswebcam ,后续通过命令:sudo fswebcam image.jpg 来进行拍照。

sudo apt-get install fswebcam

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_OpenCV_07


第三步:配置视频流文件

  • 使用命令:
sudo nano /etc/modules

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_怎么看树莓派opencv摄像头多少帧_08

  • 最后一行添加
bcm2835-v4l2

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_OpenCV_09

  • 添加完毕后,使用按 ctrl + x ,然后输入 y ,并按回车即可保存退出。

第四步:更改系统镜像源

更改镜像源请参考:Raspbian 中国软件源

  • 我使用的是清华镜像源,好用。
  • 更改软件软件源:
sudo nano /etc/apt/sources.list

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_python_10

  • 更改系统源:
sudo nano /etc/apt/sources.list.d/raspi.list

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_python_11

二、安装 OpenCV 依赖包

第一步:安装numpy

  • 使用命令安装numpy

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

sudo pip3 install numpy -i https://pypi.douban.com/simple/

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_树莓派_12


第二步:系统C/C++编译环境

  • 使用命令安装编译环境
sudo apt-get install build-essential cmake

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_怎么看树莓派opencv摄像头多少帧_13


第三步:安装图像工具包

  • 依次使用下面的命令:
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

怎么看树莓派opencv摄像头多少帧 opencv调用树莓派摄像头_opencv_14


第五步:安装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摄像头多少帧 opencv调用树莓派摄像头_怎么看树莓派opencv摄像头多少帧_15


第二步:下载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教程