树莓派3B+ opencv-3.4.0安装记录指导

树莓派3B+ 使用2018-10-09-raspbian-stretch.zip版本镜像

1.首先直接从opencv网站上下载opencv-3.4.0.zip和opencv_contrib-3.4.0.zip两个压缩包

2.树莓派中需要安装opencv编译运行的相关的环境

    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

3. 在用户主目录下创建一个opencv的文件夹,将opencv-3.4.0.zip和opencv_contrib-3.4.0.zip解压到其中

     cd opencv-3.4.0

     mkdir release

     cd release

4. 编译opencv源码

此处的cmake可以通过 cmake --version查看其版本,最好选择cmake-3.9版本,3.14版本下载各 .i文件会失败

#cmake安装指导
sudo apt-get remove cmake
tar -zxvf cmake-3.9.0.tar.gz
cd cmake-3.9.0
sudo apt-get install libcurl4-gnutls-dev
sudo apt-get install zlib1g-dev
./bootstrap --system-curl
sudo make && sudo make install

编译命令:

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/pi/opencv/opencv_contrib-3.4.0/modules -D INSTALL_PYTHON_EXAMPLES=ON  -D INSTALL_C_EXAMPLES=ON  -D BUILD_EXAMPLES=ON ..

或者

sudo cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/home/galaxy/OPENCV_3.4.0/opencv_contrib-3.4.0/modules -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3 -D BUILD_opencv_python3=ON -D BUILD_opencv_python2=OFF -D PYTHON3_EXCUTABLE=/usr/bin/python3 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m -D WITH_CUDA=OFF -D OPENCV_GENERATE_PKGCONFIG=ON ..

#在python3中也安装opencv3.4, python2中不安装,这样就不需要pip 安装opencv

sudo make -j4

在这里你会发现会编译失败,提示fatal error: boostdesc_bgm.i: No such file or directory 的错误

这是因为前面cmake时因为网络等原因无法下载 boostdesc 和 vgg_generated 下的 boostdesc_lbgm 和 vgg_generated 文件导致找不到文件而编译失败。所需要的文件我已经上传到https://download.csdn.net/download/zz531987464/10733083中,可以选择此种方式下载 或者 在:https://github.com/opencv/opencv_3rdparty/branches/stale?page=1
下载: “contrib_xfeatures2d_vgg_20160317” and "contrib_xfeatures2d_boostdesc_20161012"两个文件并将解压后的文件中的所有.i文件复制到

opencv_contrib-3.4.0/modules/xfeatures2d/src目录下(如果前面使用cmake-3.9版本的话会自动下载可以考虑不需要手动复制文件)

还有一种会出现opencv2/xfeatures2d/cuda.hpp: No such file or directory的编译错误时(老是出现该错误就多执行make几遍吧):

解决办法:
在CMakeLists.txt增加以下内容(里面的路径修改成自己的路径@_@):

INCLUDE_DIRECTORIES("/works/opencv-3.4.0/opencv_contrib-3.4.0/modules/xfeatures2d/include")

其CMakeLists.txt文件所在路径为:

<你的路径>/opencv-3.4.0/modules/stitching/ CMakeLists.txt

且在

opencv-3.4.0/modules/CMakeLists.txt

中也添加上面的路径

然后重新

sudo make -j4

sudo make install

sudo ldconfig

最终完成opencv的安装

简单的写一个小的demo来试验一下当前opencv的功能是否正常:

C++ demo验证

camera.cpp

#include <opencv2/opencv.hpp>
using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
	VideoCapture capture(0);

	while (true)
	{
		Mat frame;
		capture >> frame;
		imshow("camera preview", frame);
		waitKey(30);
	}
	return 0;
}

makefile

INCLUDE = $(shell pkg-config --cflags opencv)
LIBS = $(shell pkg-config --libs opencv)
SOURCES = camera.cpp
# 目标文件
OBJECTS = $(SOURCES:.cpp=.o)
# 可执行文件
TARGET = camera
$(TARGET):$(OBJECTS)
	g++ -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS)
$(OBJECTS):$(SOURCES)
	g++ -c $(SOURCES)
clean:
	rm $(OBJECTS) $(TARGET)
# 编译规则 $@代表目标文件 $< 代表第一个依赖文件
%.o:%.cpp
	g++ -I $(INCLUDE) -o $@ -c $<

make,然后在树莓派桌面版本的终端中运行./camera

该demo会打开usb摄像头并弹框进行预览,opencv安装成功并能够成功调用opencv相关库

python demo验证

验证python中调用opencv无错误

pi@raspberrypi:~ $ python
...
>>> import cv2
>>>

如上,输入import cv2,没有报错说明调用ok

下面再以一个简单的python调用usb camera预览视频流来验证

usbCamera.py

#!/usr/bin/env python
import cv2

capture = cv2.VideoCapture(0)

while True:
    ret, frame = capture.read()
    print "frame.shape: {}".format(frame.shape)

    cv2.imshow("capture", frame)
    if cv2.waitKey(100) & 0xff == ord("q"):
        break

cv2.destroyAllWindows()

在树莓派桌面启动方式的界面上,使用串口远程或者桌面终端执行

python usbCamera.py

如果出现Gtk-WARNING **: cannot open display 错误,则 在串口端执行 

$: xhost + 

$: export DISPLAY=:0.0

最终执行成功,在树莓派桌面上会弹出一个usbcamera视频流预览的框子,说明python调用opencv也是成功的 

树莓派opencv库同步到ubuntu中用于QT程序的调用编译

最终使用rsync命令将树莓派下的/usr/local同步到电脑本地的sysroot中

sudo rsync -avz pi@raspberrypi.local:/usr/local sysroot/usr

再次主机重新和树莓派同步

rsync -avz pi@raspberrypi.local:/lib sysroot
rsync -avz pi@raspberrypi.local:/usr/include sysroot/usr
rsync -avz pi@raspberrypi.local:/usr/lib sysroot/usr
rsync -avz pi@raspberrypi.local:/opt/vc sysroot/opt

接下来我们可以在ubuntu的QT上编写一个opencv的使用demo,在ubuntu上编译,scp到树莓派中,在树莓派上通过串口远程执行显示
mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "opencv2/opencv.hpp"
#include <QtDebug>
#include <string>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    cv::VideoCapture cap("/dev/video0");
    if(cap.isOpened())
    {
        double fps = cap.get(cv::CAP_PROP_FPS);
        qDebug() << fps;
        std::string windowName("camera review xxxxxx");
        cv::namedWindow(windowName, cv::WINDOW_NORMAL);
        while(true)
        {
            cv::Mat frame;
            bool bSuccess = cap.read(frame);
            if(!bSuccess)
            {
                break;
            }
            cv::imshow(windowName, frame);
            if(cv::waitKey(10) == 27)
            {
                cv::destroyWindow(windowName);
                break;
            }
        }
    }
}

MainWindow::~MainWindow()
{
    delete ui;
}

s1.pro

INCLUDEPATH += /home/ubuntu/raspi/sysroot/usr/local/include
LIBS += -L/home/galaxy/raspi/sysroot/usr/local/lib -lopencv_core \
    -lopencv_imgproc -lopencv_imgcodecs -lopencv_highgui -lopencv_videoio \
    -lQt5Test

具体实现demo可以在下面的网址上直接下载工程编译运行

https://download.csdn.net/download/zz531987464/10733250

将编译后的bin程序scp到树莓派中,树莓派启动到桌面版本上。在串口端执行 ./s1,会出现(camera review xxxxxx:538): Gtk-WARNING **: cannot open display 错误,

在串口端执行:export DISPLAY=:0.0

即可远程启动摄像头打开预览

ubuntu QT开发opencv应用

在ubuntu上开发opencv的QT应用出现 Undefined Reference to 'qt_version_tag' 的问题时.需要修改pro文件中链接库的部分

INCLUDEPATH += /usr/include/opencv2
LIBS += /usr/lib/x86_64-linux-gnu/libopencv_dnn.so \
        /usr/lib/x86_64-linux-gnu/libopencv_ml.so \
        /usr/lib/x86_64-linux-gnu/libopencv_objdetect.so \
        /usr/lib/x86_64-linux-gnu/libopencv_shape.so \
        /usr/lib/x86_64-linux-gnu/libopencv_stitching.so \
        /usr/lib/x86_64-linux-gnu/libopencv_superres.so \
        /usr/lib/x86_64-linux-gnu/libopencv_videostab.so \
        /usr/lib/x86_64-linux-gnu/libopencv_calib3d.so \
        /usr/lib/x86_64-linux-gnu/libopencv_features2d.so \
        /usr/lib/x86_64-linux-gnu/libopencv_highgui.so \
        /usr/lib/x86_64-linux-gnu/libopencv_videoio.so \
        /usr/lib/x86_64-linux-gnu/libopencv_imgcodecs.so \
        /usr/lib/x86_64-linux-gnu/libopencv_video.so \
        /usr/lib/x86_64-linux-gnu/libopencv_photo.so \
        /usr/lib/x86_64-linux-gnu/libopencv_imgproc.so \
        /usr/lib/x86_64-linux-gnu/libopencv_flann.so \
        /usr/lib/x86_64-linux-gnu/libopencv_core.so

即可.

我们想要在python3中使用cv2模块的话,

直接使用python3中的pip3工具直接安装opencv-python即可

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

安装完成后我们可以在 /usr/local/lib/python3.6/dist-packages 中看到相关的模块

----------------------------------------------------------------------------------------------------------------------

或者根据前面的工程中重新编译安装,具体如下(麻烦,选上面那种吧 :(   ):

首先需要安装支持的numpy
首先需要安装pip3.在通过pip3安装numpy,不要使用 apt-get install python3-numpy,无法在/usr/local/lib/python3.6/dist-packages目录下生成numpy相关文件!!
需要在python3中添加cv2模块命令:
sudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D PYTHON3_EXECUTABLE=/usr/bin/python3 -D PYTHON3_INCLUDE_DIR=/usr/include/python3.6m -D PYTHON3_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so.1 -D PYTHON3_NUMPY_PATH=/usr/local/lib/python3.6/dist-packages  -D INSTALL_PYTHON_EXAMPLES=ON  ..

sudo make -j6

sudo make install即可(不影响前面安装的so库等)。 或者

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值