Python 将 OpenCV 从 3.0.0 降级到 2.4.11 时出现 cv2 链接问题
Python cv2 linking problems while downgrading OpenCV from 3.0.0 to 2.4.11
所以我的案子很棘手。
我首先安装了 OpenCV2.4.8 并使用 python2.7 启动它。后来打算迁移到OpenCV3.0.0。在安装期间的两次我都遵循了官方文档程序。一切正常,直到我意识到 OpenCV3 没有 SIFT()
和 SURF()
模块。经过一番搜索后,我发现它们出现在 opencv_contrib 中。首先我尝试安装它,但由于某些原因我不能。
后来发现这些模块存在于OpenCV2.4.11中,打算安装。再次按照官方程序我安装了 OpenCV2.4.11 得到了相同的 SIFT()
importerror。在检查 python2 和 python3 中的 OpenCV __version__
后,我发现了以下内容
- python2: "2.4.8"
- python3: "3.0.0"
为了检查版本,我使用了以下代码:
from cv2 import __version__
print(__version__)
不幸的是我在/home
中没有太多内存,所以我在安装后删除了OpenCV2.4.8和OpenCV3.0.0构建文件夹。因此,我尝试手动删除 OpenCV2.4.8 和 OpenCV3.0.0,并从 /usr/local/libs/
和子目录中删除了所有 opencv 库,并从 /usr/local/bins/
中删除了所有 opencv 库(以下回答 question).
删除所有 opencv 文件后,我再次重新安装 OpenCV2.4.11 并尝试 运行 我的代码。它在 python2 中的导入步骤失败,给出
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
在python3
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libopencv_core.so.3.0: cannot open shared object file: No such file or directory
我再次检查了 OpenCV2.4.11 是否存在,但 python 尚未将之前存储的 link 更新为 opencv 库。自 2 天以来,我一直陷入这个错误,没有解决方案。任何帮助将不胜感激。
编辑:
python 是否有一些共享库查找文件用于存储共享库的所有位置?如果不是,这是如何工作的(python 如何识别在哪里寻找 opencv,因为 opencv 未在 pip freeze
中列出)
EDIT2:
我发现了另一个错误。我之前没有启用 -D BUILD_SHARED_LIBS=ON
。这次我在 make
和 make install
之后保留 ON
和 rand sudo ldconfig
。现在我的 /usr/local/lib/
中有一个 libopencv_core.so.2.4
。它是同一文件夹中存在的 link 到 libopencv_core.so.2.4.11
的符号。在 ldconfig
之后,当我检查 python2 import cv2
时没有显示任何错误,但 __version__
仍然显示 '2.4.8'
。我仔细检查了任何 OpenCV2.4.8 .so 文件,并且有 none。怎么还指向版本'2.4.8'
?
移除步骤:
- 通过以下方式删除 opencv 库:
sudo apt-get purge libopencv*
- 通过在 python 中尝试
import cv2
来验证是否卸载了 cv2。它应该显示不存在 cv2 模块
- 按照this sh file
安装opencv2.4.11
- 运行
sudo ldconfig
在 sudo make install
之后
- 事情通常应该有效,但在我的情况下它不起作用,因为
/usr/local/lib/python2.7/dist-packages/
中缺少 cv2.so。为此手动从 /<opencv-2.4.11 unzip locaiton>/release/lib/cv2.so
复制到 /usr/local/lib/python2.7/dist-packages/
。使用 sudo
权限。
现在 import cv2
可以工作,__version__
是 '2.4.11'
。
所以我的案子很棘手。
我首先安装了 OpenCV2.4.8 并使用 python2.7 启动它。后来打算迁移到OpenCV3.0.0。在安装期间的两次我都遵循了官方文档程序。一切正常,直到我意识到 OpenCV3 没有 SIFT()
和 SURF()
模块。经过一番搜索后,我发现它们出现在 opencv_contrib 中。首先我尝试安装它,但由于某些原因我不能。
后来发现这些模块存在于OpenCV2.4.11中,打算安装。再次按照官方程序我安装了 OpenCV2.4.11 得到了相同的 SIFT()
importerror。在检查 python2 和 python3 中的 OpenCV __version__
后,我发现了以下内容
- python2: "2.4.8"
- python3: "3.0.0"
为了检查版本,我使用了以下代码:
from cv2 import __version__
print(__version__)
不幸的是我在/home
中没有太多内存,所以我在安装后删除了OpenCV2.4.8和OpenCV3.0.0构建文件夹。因此,我尝试手动删除 OpenCV2.4.8 和 OpenCV3.0.0,并从 /usr/local/libs/
和子目录中删除了所有 opencv 库,并从 /usr/local/bins/
中删除了所有 opencv 库(以下回答 question).
删除所有 opencv 文件后,我再次重新安装 OpenCV2.4.11 并尝试 运行 我的代码。它在 python2 中的导入步骤失败,给出
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libopencv_core.so.2.4: cannot open shared object file: No such file or directory
在python3
>>> import cv2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: libopencv_core.so.3.0: cannot open shared object file: No such file or directory
我再次检查了 OpenCV2.4.11 是否存在,但 python 尚未将之前存储的 link 更新为 opencv 库。自 2 天以来,我一直陷入这个错误,没有解决方案。任何帮助将不胜感激。
编辑:
python 是否有一些共享库查找文件用于存储共享库的所有位置?如果不是,这是如何工作的(python 如何识别在哪里寻找 opencv,因为 opencv 未在 pip freeze
中列出)
EDIT2:
我发现了另一个错误。我之前没有启用 -D BUILD_SHARED_LIBS=ON
。这次我在 make
和 make install
之后保留 ON
和 rand sudo ldconfig
。现在我的 /usr/local/lib/
中有一个 libopencv_core.so.2.4
。它是同一文件夹中存在的 link 到 libopencv_core.so.2.4.11
的符号。在 ldconfig
之后,当我检查 python2 import cv2
时没有显示任何错误,但 __version__
仍然显示 '2.4.8'
。我仔细检查了任何 OpenCV2.4.8 .so 文件,并且有 none。怎么还指向版本'2.4.8'
?
移除步骤:
- 通过以下方式删除 opencv 库:
sudo apt-get purge libopencv*
- 通过在 python 中尝试
import cv2
来验证是否卸载了 cv2。它应该显示不存在 cv2 模块 - 按照this sh file 安装opencv2.4.11
- 运行
sudo ldconfig
在sudo make install
之后
- 事情通常应该有效,但在我的情况下它不起作用,因为
/usr/local/lib/python2.7/dist-packages/
中缺少 cv2.so。为此手动从/<opencv-2.4.11 unzip locaiton>/release/lib/cv2.so
复制到/usr/local/lib/python2.7/dist-packages/
。使用sudo
权限。
现在 import cv2
可以工作,__version__
是 '2.4.11'
。