更新于2020/4/27 更新:换了个树莓派4B,安装opencv的时候遇到了一些之前没碰到的问题,在这里记录一下
主要参考opencv官网文档和博客树莓派+Opencv(一)图像处理
树莓派4B上安装参考:树莓派4B 安装opencv完整教程基于python3(各种错误解决)
下载安装依赖项
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev
在4B上安装时遇到libgtk2.0-dev
安装失败的问题:
这是因为依赖项版本太高了,需要降级安装。所以可以使用命令sudo aptitude install libgtk2.0-dev
来进行安装
在安装过程中,首先会给出一个方案提示是否接受,第一个给出的方案是保留原依赖项,我们要输入n
否定它,之后给出第二个方案是降级安装,输入Y
使用该方案
其中
aptitude
是一个类似apt-get
的包管理工具,但是它能更好处理依赖问题,支持降级安装
下载源码
从GitHub下载:
两个都下载.zip
压缩包即可
解压源码并进入文件夹
unzip opencv-4.3.0.zip
unzip opencv_contrib-4.3.0.zip
cd opencv-4.3.0
创建一个build文件夹用于编译
mkdir build
cd build
运行cmake-gui
这一步其实也可以直接使用
cmake
配合各类参数,不过我觉得图形化界面方便一点
cmake-gui
选择源码路径和编译路径后点击Configure
之后在中间的选择框中找到项目BUILD_TESTS
,把它的复选框取消
这一步是因为后面编译过程中,总是由于
opencv_test_xxx
这类项目导致编译失败,因此我在这里将它取消
之后点击Generate
生成,最后输出如图所示则可以进行下一步
编译
在build
目录执行make
开始编译,-j
表示使用多少线程进行编译,不加数字代表不限制(很容易出问题,不推荐)
之前使用树莓派3B我选择的-j1
,用时约3小时;现在4B我选的是-j4
,用时约半个小时
sudo make -j4
问题
我的4B在这一步就遇到了一个问题,如图
(这个图我是找的其他人的,不过错误都是一样的)
这是一个包丢失的问题,解决方案:
可以在一个大佬的百度云盘里下载
将所有带
i
结尾的文件全部都拷贝到opencv_contrib/modules/xfeatures2d/src/
路径下即可 树莓派安装opencv时丢失的文件: 链接:https://pan.baidu.com/s/1xi6_5NuTFiP4SD649FgIJw 提取码:mbsj 原文链接:https://blog.csdn.net/weixin_43308627/article/details/97814927
之后重新make
就可以再次开始
安装库
在build
目录执行
sudo make install
完成后opencv就已经配好了
测试
Python运行
使用这里提供的测试程序测试opencv是否正常
# -*- coding:utf-8 -*-
import cv2
import numpy as np
cv2.namedWindow("gray")
img = np.zeros((512,512),np.uint8)#生成一张空的灰度图像
cv2.line(img,(0,0),(511,511),255,5)#绘制一条白色直线
cv2.imshow("gray",img)#显示图像
#循环等待,按q键退出
while True:
key=cv2.waitKey(1)
if key==ord("q"):
break
cv2.destoryWindow("gray")
最后运行正常,如图
C++运行
先使用cmake编译,再使用make编译
编写cpp代码
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main(int argc, char const *argv[])
{
Mat img = imread("image.jpg");
if (img.empty())
{
cout << "error!" << endl;
exit(0)
}
namedWindow("image1", WINDOW_NORMAL);
namedWindow("image2", WINDOW_NORMAL);
imshow("image1", img);
cvtColor(img, img, COLOR_BGR2GRAY);
blur(img, img, Size(7, 7));
Mat edges;
Canny(img, edges, 3, 9, 3);
imshow("image2", edges);
waitKey(0);
return 0;
}
在同目录创建CMakeLists.txt文件
内容:
cmake_minimum_required(VERSION 2.6)
project(test_opencv) #项目名 可改
find_package(OpenCV REQUIRED)
add_executable(test_opencv test_opencv.cpp)
#项目名和cpp文件名
target_link_libraries(test_opencv ${OpenCV_LIBS}) #项目名
之后就能用cmake编译啦
cmake .
make
运行
编译完成后,使ls
查看目录下文件
绿色的就是编译生成的文件
运行试试
./opencvtest
于是树莓派的opencv终于安装完成啦,接下来就要调用树莓派摄像头啦