如何在macos上使用opencv和python

如何在macos上使用opencv和python,python,macos,opencv,osx-snow-leopard,Python,Macos,Opencv,Osx Snow Leopard,我正在将一个在windows上开发的python+opencv应用程序移植到mac上 在windows上,我的virtualenv站点包中包含了cv2.pyd,运行良好 我是mac电脑的新手,我不明白它是否应该工作。我没有找到任何用于opencv python绑定的二进制文件,似乎正确的方法是使用macport macport正在复制opts/../site包中的cv.py和cv2.so 此时如何使用呢 我试图手动复制这两个文件,但出现错误 >>> import cv Trac

我正在将一个在windows上开发的python+opencv应用程序移植到mac上

在windows上,我的virtualenv站点包中包含了cv2.pyd,运行良好

我是mac电脑的新手,我不明白它是否应该工作。我没有找到任何用于opencv python绑定的二进制文件,似乎正确的方法是使用macport

macport正在复制opts/../site包中的cv.py和cv2.so

此时如何使用呢

我试图手动复制这两个文件,但出现错误

>>> import cv
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/cv.py", line 1, in <module>
    from cv2.cv import *
ImportError: dlopen(/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/cv2.so, 2): no suitable image found.  Did find:
        /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/cv2.so: mach-o, but wrong architecture

似乎存在不匹配。如何修复它?

目标体系结构中似乎存在不匹配。您可以尝试使用+通用版本在macports中安装opencv

另一个选项是更新您的Python版本。我相信更新的版本也是为x86_64编译的


作为第三种选择,您可以在macports中使用+python27安装opencv。然后,您可以通过执行
sudo-port-select-python27

来选择macports版本的Python,在我的例子中,arch是匹配的:

$ file ../../release.mac/lib/cv2.so 
../../release.mac/lib/cv2.so: Mach-O 64-bit dynamically linked shared library x86_64
$ file `which python`
/usr/bin/python: Mach-O universal binary with 2 architectures
/usr/bin/python (for architecture x86_64):  Mach-O 64-bit executable x86_64
/usr/bin/python (for architecture i386):    Mach-O executable i386
但不知道python以32位模式运行:

$ defaults read com.apple.versioner.python Prefer-32-Bit
1
固定人:

$ VERSIONER_PYTHON_PREFER_32_BIT=0 python


您能否给出“file/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site packages/cv2.so”和“file
which Python
”的输出。这听起来像是目标体系结构(i386、x86_64)的不匹配。谢谢。似乎存在不匹配。查看我的更新
$ VERSIONER_PYTHON_PREFER_32_BIT=0 python
$ defaults write com.apple.versioner.python Prefer-32-Bit -bool no