编译OpenCV时,找不到“cv2.so”文件。

7

我在BeagleBone Black开发板上的Debian系统中,使用python2.7编译了OpenCV 3.0.0。

安装完成后,没有出现任何错误。在“Lib”文件夹中生成了许多文件。

这些文件的命名方式如下:

libopencv_core.so
libopencv_dataset.so
libopencv_imgproc.so ...

我找不到文件cv2.so,甚至搜索了整个文件系统。

我尝试过几次,但都无法找到cv2.so

谁知道原因?谢谢。

make配置已检查,似乎正确:

sudo cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local -D
6个回答

9
确保您已安装了NumPy。如果没有安装NumPy,cmake会提示:
--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.12)
--     Libraries:                   NO
--     numpy:                       NO (Python wrappers can not be generated)
--     packages path:               lib/python2.7/dist-packages

安装numpy,它会说:

--   Python 2:
--     Interpreter:                 /usr/bin/python2.7 (ver 2.7.12)
--     Libraries:                   /usr/lib64/libpython2.7.so (ver 2.7.12)
--     numpy:                       /usr/local/lib/python2.7/dist-packages/numpy/core/include (ver 1.12.1)
--     packages path:               lib/python2.7/dist-packages

1
我的 CMake 在每个 Python 版本中只显示 Interpreter,但未显示库、NumPy 或软件包路径。 - Kasparov92
直到我将以下内容添加到我的cmake中,我才看到numpy或packages路径: -D PYTHON3_NUMPY_INCLUDE_DIRS=/path_to_python3.5/site-packages/numpy/core/include/ -D PYTHON3_NUMPY_VERSION=1.14.0 - dman

4
请检查您的CMake变量是否包含以下内容:
-D BUILD_NEW_PYTHON_SUPPORT=ON
-D BUILD_PYTHON_SUPPORT=ON
或者,检查CMake是否显示以下信息:
变量未被项目使用: BUILD_NEW_PYTHON_SUPPORT BUILD_PYTHON_SUPPORT
如果这两个变量都没有被使用,OpenCV将不会生成cv2.so,这意味着Python模块即使成功构建(没有错误消息),也无法使用。
我不知道为什么在Python环境正确的情况下会出现这些问题。

4

对于我来说,解决方案如下:

  1. Remove CMakeCache.txt file if it exists in the build directory.
  2. Add the following flags (if they are missing) to the build command (you might have to change the paths if they are different on your system):

    -D PYTHON_INCLUDE_DIR=/usr/include/python2.7
    -D PYTHON_LIBRARY=/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so
    

我成功使用的完整构建命令是:

cmake -D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D INSTALL_PYTHON_EXAMPLES=ON \
-D INSTALL_C_EXAMPLES=OFF \
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib-3.3.0/modules \
-D PYTHON_EXECUTABLE=/usr/bin/python \
-D PYTHON_INCLUDE_DIR=/usr/include/python2.7 \
-D PYTHON_LIBRARY=/usr/lib/python2.7/config-x86_64-linux-gnu/libpython2.7.so \
-D BUILD_EXAMPLES=ON ..

1
我解决了这个问题,希望下面的笔记可以帮助到别人。
首先,我会描述一下当问题发生时我的情况。在我的设备上,我安装了python2.7和python3.6,但我想使用python3.7。因此,我通过apt install安装了它,如下所示:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.7

由于OpenCV需要python-dev版本,我也通过apt install python-dev进行了安装。不幸的是,这就是问题所在。它与Python3.6绑定。因为我告诉cmake使用Python3.7,所以cmake无法生成所需的opencv包,因为它找不到所需的头文件。
当您运行cmake时,如果看到“安装路径”为空,则可以确定您遇到了我描述的相同问题。例如:

--   Python 3:
--     Interpreter:                 /usr/bin/python3 (ver 3.7.8)
--     numpy:                       /usr/local/lib/python3.7/dist-packages/numpy/core/include (ver 1.19.0)
--     install path:                -
-- 
--   Python (for build):            /usr/bin/python3

It must show it like this:

--     install path:                lib/python3.7/dist-packages/cv2/python-3.7

为了解决这个问题,请卸载python-dev并安装特定于python3.7的版本。例如:
sudo apt-get install python3.7-dev

最终您应该得到一个单独的".so"文件。对我来说,它被放置在以下位置:
/usr/local/lib/python3.7/dist-packages/cv2/python-3.7/cv2.cpython-37m-aarch64-linux-gnu.so

0
在新版本的OpenCV中,cv2.so文件被重命名为类似于cv2.build_information.so的东西。因此,您可能正在寻找错误的文件名。
因此,在使用Python解释器构建OpenCV之后,请检查build/lib中的相应文件名。在我的情况下,cv2.so被重命名为cv2.cpython-37m-x86_64-linux-gnu.so。
build/lib/python3/
└── cv2.cpython-37m-x86_64-linux-gnu.so

0

我认为你可以在下载的OpenCV目录中查找cv2.so

我遇到了同样的问题,最终在

dir = "./myopencv/opencv/build/lib"中找到了它。

当我尝试解决这个问题时,我发现cv2.so可能是一些.so文件的集合。如果你的版本匹配,即使从别人的电脑上获取也没问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接