三、opencv软件环境配置

文章目录

  • 三、opencv软件环境配置
    • 3.1 编译流程
    • 3.2 编译过程遇到问题及解决
    • 3.3 虚拟机遇到的问题及解决
    • 3.4 测试代码

三、opencv软件环境配置

linux子系统中opencv安装位置:D:\ubuntu\opencv-4.5.0
虚拟机opencv安装位置:/home/pi/opencv-4.5.0
树莓派opencv安装位置:/home/pi/opencv-4.5.0

3.1 编译流程

参考链接

opencv官网

  1. opencv版本下载:opencv-4.5.0

    opencv和opencv_contrib一定要版本一致

    (1)官网下载地址:https://opencv.org/releases/
    选择源文件下载opencv-4.5.0.zip和opencv_contrib-master.zip。

    两个压缩包都下载后,新建文件夹opencv-4.5.0,将两个压缩包文件解压到opencv-4.5.0文件夹下。并将opencv_contrib-master改名为opencv_contrib-4.5.0.

    (2)打开树莓派硬件,将下载好的opencv-4.5.0拷贝到树莓派系统 /home/pi/opencv-4.5.0目录下。

  2. 更新软件系统:输入命令 sudo apt-get update 等待下载更新完成。下载完成后输入命令sudo apt-get upgrade 使安装包适应当前系统环境。

  3. 根目录扩容:由于使用的是内存卡,在安装软件时可能会出现内存不足,所需要将系统扩展至全内存卡。在终端输入sudo raspi-config 命令。选择“高级Advanced Options”,然后选择扩展系统,然后按键盘“Enter”后点击“finish”,在终端输入 sudo reboot重启系统。检查输出磁盘是否扩展 输入命令 df –h ,可以看到磁盘已用和可用的容量。一般16G内存卡,在装完系统后可用容量在6G左右。

  4. 安装opencv软件所需要的依赖包:安装命令如下:

    sudo apt install build-essential

    sudo apt install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

    sudo apt install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

    //第三行中,可能会出现 无法定位软件包libjasper-dev 的错误提示

    //解决方法如下:

    sudo add-apt-repository “deb http://security.ubuntu.com/ubuntu xenial-security main”
    sudo apt update
    sudo apt install libjasper1 libjasper-dev

  5. 编译安装opencv-4.5.0

    (1)进入到 opencv-4.5.0目录 输入命令 cd /home/pi/opencv-4.5.0/opencv-4.5.0,改变文件权限 输入命令 sudo chmod 777 * -R

    (2)创建并进入编译目录

    输入如下命令:mkdir build & cd bulid

    (3)编译

    输入命令 sudo cmake -DOPENCV_EXTRA_MODULES_PATH=…/…/opencv_contrib/modules …

    生成本地Makefile文件(注意命令后两个符号是英文“…”)。

    然后输入编译命令

    sudo make -j4 2>&1 | tee make.log

    使用最多4线程编译,加快编译速度。同时保存编译信息到make.log,方便离线查看编译进度。编译进度会显示出来。

    编译时间比较长大约5-8小时。当断电或者重启后,直接进入到build目录路径

    输入 sudo make 命令继续编译直到编译完成到100%。如下图所示

    (4)安装编译好的opencv

    输入命令sudo make install

    动态链接库安装

    输入命令sudo ldconfig

  6. 查看已经安装的opencv版本。

    输入命令python3

    可以看到当前python3的版本号。

    输入 命令 import cv2

    输入命令 cv2.__version__

    可以看到当前安装的opencv的版本(命令中“__”是两个下划线)。

    到此时opencv-4.5.0已经编译安装完成了。

3.2 编译过程遇到问题及解决

参考链接

  1. 问题一:

    • 在72%的时候遇到了出错,fatal error: boostdesc_bgm.i: 没有那个文件或目录#include “boostdesc_bgm.i”

    • 解决方法:出现这个问题就是boostdesc和vgg文件缺失导致的编译失败问题。
      首先我们要进入到/home/pi/…/opencv_contrib/modules/xfeatures2d/src目录下,

      下载此文件https://download.csdn.net/download/ninwji/11739702 将压缩包内的文件均复制到此目录下。

  2. 问题二:

    • /home/pi/opencv-4.5.0/opencv_contrib-4.5.0/modules/xfeatures2d/test/test_features2d.cpp:51:10: fatal error: features2d/test/test_detectors_regression.impl.hpp: 没有那个文件或目录
      #include “features2d/test/test_detectors_regression.impl.hpp”

    • 解决方法一:

      • 把这几个文件从D:\ubuntu\opencv-4.5.0\opencv-4.5.0\modules\features2d\test复制到D:\ubuntu\opencv-4.5.0\opencv_contrib-4.5.0\modules\xfeatures2d\test

        test_descriptors_invariance.impl.hpp
        test_descriptors_regression.impl.hpp
        test_detectors_invariance.impl.hpp
        test_detectors_regression.impl.hpp
        test_invariance_utils.hpp

      • 修改D:\ubuntu\opencv-4.5.0\opencv_contrib-4.5.0\modules\xfeatures2d\test:test_features2d.cpp中51\52行和test_rotation_and_scale_invariance. cpp中7\8行,把features2d/test/去掉

    • 解决方法二:

      • 把\opencv-4.5.0\opencv\modules\features2d文件夹复制到\opencv-4.5.0\opencv\build
  3. 问题三:

    • fatal error: opencv2/video/detail/tracking.private.hpp: No such file or directory #include “opencv2/video/detail/tracking.private.hpp”
    • 解决不了,似乎是版本opencv和opencv_ctrib版本不一致,重新下载,两个都下4.5.0
  4. 问题四:click

    • 97%卡死

    • 添加树莓派的SWAP交换区

      • 编辑dphys-swapfile文件,

        nano /etc/dphys-swapfile

      • 将conf_swapsize 的值修改成你想要的大小,以mb为单位,设置为2G大小,保存之后,重启dphys-swapfile服务

        sudo /etc/init.d/dphys-swapfile restart

      • 最后查看交换空间的大小:free -m

    • 用多线程来进行编译的时候,前期编译速度很快,但是到大概到70%的时候,编译的速度就越来越慢。可以用htop查看一下进程的信息,发现进程处于D状态,D状态表示进程正在不可中断的等待状态。用make -j1来编译

3.3 虚拟机遇到的问题及解决

  1. 任务栏消失及解决:click

    • $rm -rf ~/.config/lxpanel/LXDE-pi
      这段话意思就是删除LXDE-pi文件,手动删也可以
    • 重启:$ sudo reboot
  2. 摄像头打开黑屏:click

    • 将usb兼容性改成3.0
  3. opencv摄像头闪退:click

    • waitKey返回值问题
      waitkey(30) 如果不按键的时候是返回 oxff,这个无符号就是255,有符号就是-1
      windows vs 的环境默认了这个为非符号数 即255

      解决方案:把原始代码中循环读取帧的
      if (waitKey(30)>=0) break;
      改为
      if (waitKey(30) != 255) break;
      或者把waitkey的返回值用有符号数去读取。

3.4 测试代码

编译命令:g++ test.cpp pkg-config opencv --libs

#include 
#include 
#include 
#include "opencv2/imgcodecs/legacy/constants_c.h"
#incldue 
using namespace cv;
int main(int argc,char *argv[])
{
    Mat img=imread("/home/pi/Desktop/1.jpg",CV_LOAD_IMAGE_COLOR);
    if(img.empty())
        return -1;
    namedWindow("1".CV_WINDOW_AUTOSIZE);
    imshow("1",img);
    waitKey(0);
    return 0;
}

#include 
#include 
#include 
using namespace cv;

int main(int argc, char *argv[])
{
    Mat img = imread("/home/pi/Desktop/1.jpg", CV_LOAD_IMAGE_COLOR);
    if(img.empty()) 
       return -1;
    namedWindow("arnold_schwarzenegger", CV_WINDOW_AUTOSIZE );
    imshow("arnold_schwarzenegger", img);
    waitKey(0);
    return 0;
}




#include 
#include 
using namespace cv;
int main()
{
    std::cout << "hello world!" << std::endl;
    Mat srcImage = imread("/home/pi/Desktop/1.jpg");
    imshow("冰冰", srcImage);
    waitKey(0);
    return 0;
}

你可能感兴趣的:(玩转树莓派,树莓派,opencv)