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日检索)
您可以使用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)