【问题标题】:installed python opencv 2.4.11 but only in the system it says I installed only 2.4.8安装了 python opencv 2.4.11 但仅在系统中说我只安装了 2.4.8
【发布时间】:2015-07-26 19:05:28
【问题描述】:

我点击此链接并安装了 opencv 2.4.11。但是,当我打印当前的 opencv 版本时,它说它是 2.4.8。谁能告诉我出了什么问题?谢谢。

https://gist.github.com/dynamicguy/3d1fce8dae65e765f7c4

附:我正在使用 Ubuntu 14.04.2 LTS。查看opencv当前版本的命令是

导入 cv2

打印 cv2.__version__

正如 PraveenPalanisamy 所建议的那样,我发布了我运行命令的结果

ls -l /usr/local/lib | grep opencv

-rw-r--r-- 1 root root 1483006 Jul 26 21:33 libopencv_calib3d.a

-rw-r--r-- 1 root root 1850138 Jul 26 21:45 libopencv_contrib.a

-rw-r--r-- 1 root root 4811636 Jul 26 21:26 libopencv_core.a

-rw-r--r-- 1 root root 1420516 Jul 26 21:29 libopencv_features2d.a

-rw-r--r-- 1 root root 1100238 Jul 26 21:26 libopencv_flann.a

-rw-r--r-- 1 root root 863666 Jul 26 21:39 libopencv_gpu.a

-rw-r--r-- 1 root root 1258032 Jul 26 21:28 libopencv_highgui.a

-rw-r--r-- 1 root root 4363758 Jul 26 21:28 libopencv_imgproc.a

-rw-r--r-- 1 root root 2400896 Jul 26 21:37 libopencv_legacy.a

-rw-r--r-- 1 root root 1051714 Jul 26 21:35 libopencv_ml.a

-rw-r--r-- 1 root root 411916 Jul 26 21:44 libopencv_nonfree.a

-rw-r--r-- 1 root root 954904 Jul 26 21:38 libopencv_objdetect.a

-rw-r--r-- 1 root root 3269948 Jul 26 21:41 libopencv_ocl.a

-rw-r--r-- 1 root root 187250 Jul 26 21:38 libopencv_photo.a

-rw-r--r-- 1 root root 960120 Jul 26 21:46 libopencv_stitching.a

-rw-r--r-- 1 root root 543080 Jul 26 21:47 libopencv_superres.a

-rw-r--r-- 1 root root 1779168 Jul 26 21:29 libopencv_ts.a

-rw-r--r-- 1 root root 625806 Jul 26 21:29 libopencv_video.a

-rw-r--r-- 1 root root 508350 Jul 26 21:47 libopencv_videostab.a

【问题讨论】:

  • 你是怎么安装的?
  • 我按照这里的说明安装了gist.github.com/dynamicguy/3d1fce8dae65e765f7c4
  • 你最后运行sudo make install了吗?
  • 是的,我做了,执行命令花了 30 分钟,所以我认为它“正确”完成了
  • 你能粘贴ls -l /usr/local/lib | grep opencv的输出吗

标签: python opencv version


【解决方案1】:

更新: 从您的ls -l /usr/local/lib | grep opencv 的输出来看,似乎构建了静态 OpenCV 库。由于指令中第 21 行的 -D BUILD_SHARED_LIBS=OFF 标志。您可以从该行中删除 -D BUILD_SHARED_LIBS=OFF 并再次检查安装过程以进行全新安装,或者只需使用当前状态运行以下 3 行:

cmake -G "Unix Makefiles" -D CMAKE_CXX_COMPILER=/usr/bin/g++ CMAKE_C_COMPILER=/usr/bin/gcc -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D INSTALL_C_EXAMPLES=ON -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ON -D WITH_QT=ON -D WITH_OPENGL=ON -D BUILD_FAT_JAVA_LIB=ON -D INSTALL_TO_MANGLED_PATHS=ON -D INSTALL_CREATE_DISTRIB=ON -D INSTALL_TESTS=ON -D ENABLE_FAST_MATH=ON -D WITH_IMAGEIO=ON -D WITH_GSTREAMER=ON ..
make all -j4 # 4 cores
sudo make install

。这应该构建共享的 OpenCV 库,并希望它能解决您的问题。如果由于某种原因您仍然遇到相同的错误,请使用我剩下的答案(如下)来解决问题:

由于某种原因,您正在导入的 python 模块 cv2 来自 OpenCV 2.4.8,当您按照您遵循的说明运行第 11 行时安装了该模块(特别是此命令:@987654325 @)。 您遵循的说明中的第 23 行 (sudo make install) 应该已将 OpenCV2.4.11 安装为默认 OpenCV 库。这可以通过查看ls -l /usr/local/lib | grep opencv 的输出来验证。 您可以通过查看ls -l /usr/local/lib | grep opencv_core 的输出来使其更简单,而不是查看输出的许多行。 您应该会看到如下内容:

libopencv_core.so -> libopencv_core.so.2.4
libopencv_core.so.2.4 -> libopencv_core.so.2.4.11
libopencv_core.so.2.4.11
libopencv_core.so.2.4.8

案例 1: 如果您看到上面的行与它们完全一样,那么这意味着您的sudo make install 工作正常,因此,默认的 OpenCV 库版本(由pkg-config --libs opencv 指向)是 2.4.11。然后您需要查看 python 模块路径以了解为什么您的 cv2 python 模块来自 OpenCV 2.4.8 而不是来自 OpenCV2.4.11 的模块。为此,您可以运行 ls -l /usr/local/lib/python2.7/dist-packages/ | grep cv 以确保您看到 cv2cv 列出(例如,请参见下面的行)

$ ls -l /usr/local/lib/python2.7/dist-packages/ | grep cv
-rw-r--r--  1 root staff  1638779 Jul 13 18:29 cv2.so
-rw-r--r--  1 root staff       21 Feb 25 07:10 cv.py

然后,查看ldd /usr/local/lib/python2.7/dist-packages/cv2.so | grep opencv 的输出,它应该类似于:

libopencv_core.so.2.4 => /usr/local/lib/libopencv_core.so.2.4 (0x00007f0df24e2000)
libopencv_flann.so.2.4 => /usr/local/lib/libopencv_flann.so.2.4 (0x00007f0df226e000)
libopencv_imgproc.so.2.4 => /usr/local/lib/libopencv_imgproc.so.2.4 (0x00007f0df1d7f000)
libopencv_highgui.so.2.4 => /usr/local/lib/libopencv_highgui.so.2.4 (0x00007f0df1ad2000)

仔细查看输出的第一行:(例如) libopencv_core.so.2.4 => /usr/local/lib/libopencv_core.so.2.4。这是 python 模块/包装器使用的库。这应该指向 libopencv_core.so.2.4.11 而不是 libopencv_core.so.2.4.8。您可以使用之前使用的相同命令 (ls -l /usr/local/lib | grep opencv) 来验证 libopencv_core.so.2.4 指向的位置。

案例 2: ls -l /usr/local/lib | grep opencv_core 的输出类似于:

libopencv_core.so -> libopencv_core.so.2.4
libopencv_core.so.2.4 -> libopencv_core.so.2.4.8

这意味着您在构建 OpenCV2.4.11 时运行的 sudo make install 由于某种原因无法正常工作。那么你可以有两种选择:

选择 1: 从opencv-2.4.11/release 目录运行make && sudo make install。然后按照上面的步骤,看看有没有看到这行libopencv_core.so.2.4 -> libopencv_core.so.2.4.11。如果你看到它,import cv2 print cv2.version 应该会打印 2.4.11。

选择 2 如果您看到文件 libopencv_core.so.2.4.11 存在于您的 /usr/local/lib 目录中,那么您只需创建一个 symlink 以使默认 OpenCV 库文件指向版本 2.4.11(当您从 OpenCV 构建目录运行 sudo make install

【讨论】:

  • omg thx 解决了我的问题!它是使用您在答案开头给出的三行代码解决的,哈哈,但感谢您为提供如此详细的解释所做的努力。我昨天刚开始使用 ubuntu,老实说,我不知道你是如何解决这个问题的,但再次感谢你的努力!
  • 很高兴能帮您解决问题。
猜你喜欢
  • 1970-01-01
  • 2017-05-11
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多