问题来源:

最近因为要在Jetson Xavier NX上使用SIFT、SURF等包,但是由于opencv版本问题,一直都报错:

module 'cv2' has no attribute 'xfeatures2d'

这个错误是因为现在的opencv版本没有这个包,网上有很多人说这个是专利问题,确实在那之后这两种受到商业保护的算子从opencv库中移除了出去,但是只需要下载opencv_contrib库,并且编译时设置选项即可使用,根据我在Jetson板子上的试验,opencv4.4.0版本是没有任何问题的,网上所说的将opencv版本降级,这个我试了,没有用。如果在上位机上报这个错误,可以直接执行:

pip install opencv-python
pip install opencv-contrib-python

就可以解决问题了,但是在Jetson系列的板子上,执行这个是装不上去的,原因是自动查找软件包的时候,找不到适合ARM板子的版本,所以需要手动安装opencv,于是,在下面的介绍中,开始介绍如何手动安装opencv4.4.0和opencv-contrib4.4.0。

一、下载和安装依赖项

1. 更新一下系统

sudo apt-get update
sudo apt-get upgrade

如果是首次更新,可能时间比较长。

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_contrib安装包:

     首先下载 Opencv4.4.0 的源文件,选择 4.4.0 版本的 Sources 版本: https://opencv.org/releases/

对应版本:https://github.com/opencv/opencv_contrib/releases

4. 安装CMake-gui,也可以不下载安装,用指令也可以完成Cmake,但是个人感觉用这个真方便,而且可以避免很多不必要的错误,这里用的是GUI的方式。

sudo apt-get install cmake-qt-gui

                                

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_ubuntu opencv库文件位置

二、OpenCV配置

1. 解压opencv和opencv_contrib安装包,并建立opencv文件夹,我解压以后的文件放置如下,网上也有人说将opencv_contrib安装包放在opencv里,也行,但是下面这样比较省事。

                          

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_02

                                                                          

2. 进入压缩包解压以后的opencv文件夹(个人习惯,将后面的数字都删掉了),打开终端,然后依次输入以下指令:

mkdir build
cd build

3. 去github或是其他网站把opencv_contrib的module缺失文件下载下来,然后放到opencv_contrib/modules/xfeatures2d/src目录下,下载链接:https://github.com/opencv/opencv_contrib/issues/1301

    或是百度云网盘:链接:https://pan.baidu.com/s/1mB1tc2UplD4ZMeSXyuweIw    提取码:k7y3

注:在这一步的原因在后面安装过程出现的问题这一栏,一定要注意!

                            

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_ubuntu opencv库文件位置_03

4. 将opencv/modules/features2d复制,然后粘贴到build目录。

                             

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_04

5. 进入CMake的图形化界面,(不要忘了最后的空格和两个点)在上方的两个路径里面,选择代码所在文件夹的路径和要安装的路径,这里我们将要安装的路径选择新建的build文件夹:

cmake-gui ..

                               

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_opencv_05

6. 点击左下方的Configure按钮,选择Unix Makefiles,选择Use default native compilers(默认),然后点击Finish:

                                

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_ubuntu_06

7. 需要下载一些文件,要等待一段时间,然后CMake即载入默认配置,如下图所示:  

                               

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_jetson_07

       

          窗口的中间部分即配置列表,这里和使用cmake命令直接生成makefile文件一致的,这里通过图形界面的方式来进行配置,感觉比之前用命令行代码或者代码实现更加直观和方便。

                              

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_08

8. 针对个人需求进行修改,主要是为了用上SIFT、SURF等算子,所以下面这几步很重要:
    (1)在CMAKE_BUILD_TYPE 值处输入RELEASE,其他保持不变(如果已经存在就不必修改):

                              

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_ubuntu opencv库文件位置_09

    (2)在OPENCV_EXTRA_MODULES_PATH处,选择输入目录(单击这一行后方空白处即可选中),选到我们刚才解压的opencv_contrib/modules文件夹:

                               

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_10

(很重要!)

                                 

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_opencv_11

9. 点击Generate生成配置文件:

                                

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_ubuntu opencv库文件位置_12

                                                                                                                     

10. 在build目录下打开终端,输入:

make
sudo make install

                      make成功:

                           

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_jetson_13

                       install:

                          

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_jetson_14

11. 然后就开始安装了,这一步需要等很长时间,可以喝杯咖啡。
12. 等下面显示到100%就完成了。

                          

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_15

 

三、OpenCV配置

1. 安装成功后需要设置opencv的环境变量。打开文件:

sudo gedit /etc/ld.so.conf.d/opencv.conf

2. 将以下内容添加到最后:

/usr/local/lib

                 

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_opencv_16

3. 接下来配置库:

sudo ldconfig

4. 更改环境变量:

sudo gedit /etc/bash.bashrc

5. 在文件后添加:

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 
export PKG_CONFIG_PATH

                    

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_jetson_17

6. 保存退出,执行下面生效,到此,安装和配置的整个过程都完成了!

source /etc/bash.bashrc

安装过程出现的问题:

(1)fatal error: features2d/test/test_detectors_regression.impl.hpp: No such file or directory

               

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_jetson_18

         原因是没找到这个文件,解决方法如下

                        将opencv/modules/features2d复制,然后粘贴到build目录。

                

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_04

(2)出现opencv_contrib/modules/xfeatures2d/src/vgg.cpp:490:41: fatal error: vgg_generated_120.i: No such file or directory。(还有可能会出现另一些 *.i文件找不到的错误)

             

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_20

        原因是在Cmake环节,下载的时候有的文件没下载下来:

                   

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_contrib_21

     解决方法如下:

opencv_contrib/modules/xfeatures2d/src目录下就可以了,下载链接:https://github.com/opencv/opencv_contrib/issues/1301

                

ubuntu opencv库文件位置 ubuntu安装opencv-contrib_opencv_22

         2)或是百度云网盘:链接:https://pan.baidu.com/s/1mB1tc2UplD4ZMeSXyuweIw    提取码:k7y3