Python 无法导入 OpenCV,因为找不到 libjpeg.8.dylib
我在Mac OSX - Mavericks上尝试让opencv在python中工作,但在导入cv时总是出现找不到libjpeg.8.dylib的错误。
(我最近从Mountain Lion更新过来)
这是我做的步骤:
1.brew tap homebrew/science
(添加一个软件源)
2.brew install opencv
(安装opencv)
3.python
(打开python环境)
4.import cv
(尝试导入opencv)
-结果出现了以下错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/opencv/2.4.9/lib/python2.7/site-packages/cv.py", line 1, in <module>
from cv2.cv import *
ImportError: dlopen(/usr/local/Cellar/opencv/2.4.9/lib/python2.7/site-packages/cv2.so, 2): Library not loaded: /usr/local/lib/libjpeg.8.dylib
Referenced from: /usr/local/Cellar/opencv/2.4.9/lib/libopencv_highgui.2.4.dylib
Reason: image not found
- 我找到了libjpeg.8.dylib,位置在
/usr/local/Cellar/jpeg/8d/lib/
,但显然这个位置不是libopencv_highgui.2.4.dylib要找的地方。
我对Mac OS和homebrew还不太熟悉。有人能解释一下怎么解决这个错误,让opencv正常运行吗?我有Mac自带的python,还有通过homebrew安装的python。
谢谢。
4 个回答
我在macOS上也遇到了类似的问题,使用的是Pillow这个库。这里有一个提议的解决方案,是从源代码安装,这个方法对我有效。我需要把它安装到/usr/local/
目录下,这样Pillow才能找到它。你还需要一些命令行工具,这就是第一行的目的:
xcode-select --install
curl -O -J -L http://www.ijg.org/files/jpegsrc.v8.tar.gz
tar xvfz jpeg*tar.gz # Unzip and untar what you downloaded
cd jpeg-8 # Change directory to wherever it unpacked to
./configure --prefix="/usr/local" # Configure with the necessary prefix
make
sudo make install
我之前也遇到过类似的问题(在Python中,import opencv
有一天能正常工作,第二天却出现了你说的那个错误),我找到的这个解决办法对我有效:
升级你的Homebrew中的opencv,比如:
brew upgrade opencv
(或者在我的情况下是 brew upgrade opencv3
)
希望这能帮到你
我在我的Mac上用brew安装OpenCV的时候,遇到了同样的问题,不过那是发生在一个Xcode的C++控制台应用程序上。
不过,有一种解决这个问题的替代方法,就是把文件用cp
命令复制到库的位置。
cp /usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib /usr/local/lib/libjpeg.8.dylib
还有一种方法,我不太建议使用,就是用mv
命令把整个文件位置移动到你的/usr/local/lib/目录下。
mv /usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib /usr/local/lib/
这个问题的简单解决办法是,在 /usr/local/lib 文件夹里创建一个指向 libjpeg.8.dylib 实际位置的符号链接,像这样:
$ sudo ln -s /usr/local/Cellar/jpeg/8d/lib/libjpeg.8.dylib /usr/local/lib/libjpeg.8.dylib
问题在于,opencv 和 python 需要 libjpeg.8.dylib 在 /usr/local/lib/ 这个地方,但 homebrew 安装它却放在了 /usr/local/Cellar/,所以就出现了让人烦恼的错误。