python:OpenCV根目录

Mat*_*W-D 5 python portability opencv

我正在使用OpenCV用于各种对象检测器,我发现编写可移植代码很困难.

例如,要加载面部检测器,在通过自制软件安装OpenCV的Mac上,我必须写:

haar=cv.Load('/usr/local/Cellar/opencv/2.4.2/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
Run Code Online (Sandbox Code Playgroud)

这不便携; 如果我想换到另一台机器,我将不得不确定另一个绝对路径并更改此代码.

是否有一个变量来保存OpenCV的OpenCV根目录?这样我就可以这样写:

haar=cv.Load(os.path.join(OpenCVRoot, "haarcascades", 
                          "haarcascade_frontalface_default.xml"))
Run Code Online (Sandbox Code Playgroud)

更新:看起来这对我来说不仅仅是一个问题; 这也是OpenCV文档的一个问题.该文档包含以下破坏的示例代码:

>>> import cv
>>> image = cv.LoadImageM("lena.jpg", cv.CV_LOAD_IMAGE_GRAYSCALE)
>>> cascade = cv.Load("../../data/haarcascades/haarcascade_frontalface_alt.xml")
>>> print cv.HaarDetectObjects(image, cascade, cv.CreateMemStorage(0), 1.2, 2, 0, (20, 20))
[((217, 203, 169, 169), 24)]
Run Code Online (Sandbox Code Playgroud)

如果有一种方法可以推断出安装lena.jpg和预训练分类器等示例的方法,这将很容易避免.

资料来源:http://opencv.willowgarage.com/documentation/python/objdetect_cascade_classification.html(2013年3月5日检索)

Kai*_*iec 6

您可以使用cv2.__file__获取模块的路径,然后使用os.path来解析符号链接并执行一些路径操作.这行代码返回我的Mac OS自制软件安装中的haarcascades文件的目录.它也可以用于其他安装.

from os.path import realpath, normpath
normpath(realpath(cv2.__file__) + '../../../../../share/OpenCV/haarcascades')
Run Code Online (Sandbox Code Playgroud)