【问题标题】:How to build and install OpenCV 4.0?如何构建和安装 OpenCV 4.0?
【发布时间】:2019-02-15 14:39:33
【问题描述】:

首先我想说我正在学习,所以我不知道的东西很多。

我正在使用已使用 JetPack 3.3 进行映像的 Jetson TX1

开发板使用 Ubuntu 16.04

我安装了 cmake 3.13.4。我安装了 Python 3.7(包括 Python 2.7(默认)/Python3/Python3.5/Python 3.7)。

我使用命令 python3.7 -m pip install numpy。它显示了

Successfully installed numpy-1.16.1

我有问题:如何找出 numpy 的安装位置?当我使用 ls 命令查看 /usr/local/lib/python3.7/dist-packages 时,它显示为空。

我第一次尝试构建openCV,我得到了这个

Python 2:
    Interpreter:                 /usr/bin/python2.7 (ver 2.7.12)
    Libraries:                   /usr/lib/aarch64-linux-gnu/libpython2.7.so (ver 2.7.12)
    numpy:                       /usr/lib/python2.7/dist-packages/numpy/core/include (ver 1.11.0)
    packages path:               lib/python2.7/dist-packages

  Python 3:
    Interpreter:                 /usr/bin/python3 (ver 3.5.1)

我想使用 Python3.7 来构建 openCV。我对cmake没有太多经验,但我知道我可以通过在使用cmake命令行时定义参数来更改文件“CMakeLists.txt”中的参数。

我有一个问题:是否有另一种方法来定义这些参数,这样我就不必在每次使用 cmake 构建时都将这些参数包含在命令行中?

然后我在命令行下面使用了

sudo cmake -D ENABLE_PRECOMPILED_HEADERS=OFF -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D WITH_CUFFT=OFF -D WITH_CUBLAS=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D INSTALL_PYTHON_EXAMPLES=OFF -D INSTALL_C_EXAMPLES=OFF -D PYTHON3_EXECUTABLE=/usr/bin/python3.7 -D PYTHON3_LIBRARIES=/usr/lib/aarch64-linux-gnu/libpython3.7m.so -D PYTHON3_NUMPY_INCLUDE_DIRS=/usr/lib/python3.7/dist-packages/numpy/core/include -D PYTHON_DEFAULT_EXECUTABLE=/usr/bin/python3.7 -D BUILD_EXAMPLES=OFF ..

我明白了

Python 3:
--     Interpreter:                 /usr/bin/python3.7 (ver 3.5.2)
--     Libraries:                   /usr/lib/aarch64-linux-gnu/libpython3.7m.so (ver 3.5.2)
--     numpy:                       /usr/lib/python3.7/dist-packages/numpy/core/include (ver 1.16.1)
--     packages path:               lib/python3.5/dist-packages
-- 
--   Python (for build):            /usr/bin/python3.7

我有个问题:Python 3.7 之后的 3.5.2 版本是什么?我不确定为什么包路径指向 Python 3.5。没有 libpython3.7,所以我选择了我找到的 libpython3.7m.so。这是正确的吗?

然后我用

sudo make -j4

最后我收到以下错误消息:

[ 98%] Building CXX object modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o
/mnt/data/Software/opencv/modules/python/src2/cv2.cpp:39:33: fatal error: numpy/ndarrayobject.h: No such file or directory
compilation terminated.
modules/python3/CMakeFiles/opencv_python3.dir/build.make:62: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o' failed
make[2]: *** [modules/python3/CMakeFiles/opencv_python3.dir/__/src2/cv2.cpp.o] Error 1
CMakeFiles/Makefile2:3371: recipe for target 'modules/python3/CMakeFiles/opencv_python3.dir/all' failed
make[1]: *** [modules/python3/CMakeFiles/opencv_python3.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 98%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/opencl/perf_motempl.cpp.o
[ 98%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_estimaterigid.cpp.o
[ 98%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/opencl/perf_optflow_farneback.cpp.o
[ 98%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/opencl/perf_optflow_pyrlk.cpp.o
[ 98%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_kalman.cpp.o
[ 98%] Linking CXX executable ../../bin/opencv_test_calib3d
[ 98%] Built target opencv_test_calib3d
[ 99%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/perf_bgfg_knn.cpp.o
[100%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_main.cpp.o
[100%] Building CXX object modules/video/CMakeFiles/opencv_test_video.dir/test/test_optflowpyrlk.cpp.o
[100%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/perf_bgfg_mog2.cpp.o
[100%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/perf_disflow.cpp.o
[100%] Linking CXX executable ../../bin/opencv_test_video
[100%] Built target opencv_test_video
[100%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/perf_ecc.cpp.o
[100%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/perf_main.cpp.o
[100%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/perf_optflowpyrlk.cpp.o
[100%] Building CXX object modules/video/CMakeFiles/opencv_perf_video.dir/perf/perf_variational_refinement.cpp.o
[100%] Linking CXX executable ../../bin/opencv_perf_video
[100%] Built target opencv_perf_video
Makefile:162: recipe for target 'all' failed
make: *** [all] Error 2

如何解决这些问题?

【问题讨论】:

  • 您确定要构建自己的python版本的opencv,而不是仅仅安装opencv 4.0的python包吗?
  • 单个问题每个问题帖子,请。错误消息是关于缺少头文件numpy/ndarrayobject.h。你的 numpy 安装下真的有这个文件吗?

标签: python opencv ubuntu cmake


【解决方案1】:

这里有一些答案...

您可以通过以下方式获取 Numpy 安装路径和版本:

import numpy as np

print(np.__path__)
'/usr/local/lib/python3.7/site-packages/numpy'

print(np.__version__)
'1.15.1

你也可以用pip获取安装目录:

pip show numpy

样本输出

Name: numpy
Version: 1.15.1
Summary: NumPy: array processing for numbers, strings, records, and objects.
Home-page: http://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email: None
License: BSD
Location: /usr/local/lib/python3.7/site-packages
Requires: 
Required-by: tifffile, scipy, scikit-learn, PyWavelets, numexpr, numba, matplotlib, imageio 

一般情况下,您不应将sudo 用于cmake,而只需:

cmake ...

如果您想避免键入所有开关,我通常会在所有 OpenCV 内容和 $HOME/scripts 中创建一个 shell 脚本 outside,并将所有开关保留在那里:

#!/bin/bash

cd $HOME/OpenCV/build/somewhere

cmake -D WITH_OPENCL=OFF -D WITH_CUDA=OFF -D CMAKE_BUILD_TYPE=RELEASE ..

避免将sudo 用于make,更喜欢:

make -j 4

【讨论】:

  • 非常感谢您的帮助。我使用 sudo 的原因是我将 opencv 的下载源文件存储在与 Jetson 板连接的 ssd 上。作为一种好的做法,我应该将这些文件存储在主硬盘而不是外部硬盘中吗?
  • 我照你说的做,numpy 留在 /home/ubuntu/.local/lib/python3.7/site-packages/ 下。这是否意味着它停留在错误的位置?
  • 很抱歉,我无法回答您的任何一个问题 - 这在很大程度上取决于您的项目设置。
  • 你想在CUDA上使用它怎么样?
猜你喜欢
  • 2018-07-11
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 2021-11-06
  • 2012-07-15
  • 2021-05-13
  • 2012-09-07
  • 2013-12-03
相关资源
最近更新 更多