我正在使用OpenCV进行各种对象检测器,我发现很难编写可移植代码。
例如,要在通过自制程序安装OpenCV的mac上加载人脸检测程序,我必须编写:
haar=cv.Load('/usr/local/Cellar/opencv/2.4.2/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
这是不可移植的;如果我想更改到另一台机器,我将不得不确定另一个绝对路径并更改此代码。
是否有一个变量保存OpenCV的OpenCV根?这样我可以写一些东西,比如:
haar=cv.Load(os.path.join(OpenCVRoot, "haarcascades",
"haarcascade_frontalface_default.xml"))
更新:看起来这不仅仅是我的问题,也是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)]
如果有办法推断像lena.jpg这样的示例和预先训练的分类器安装在哪里,这将很容易避免。
来源:http://opencv.willowgarage.com/documentation/python/objdetect_cascade_classification.html(检索时间:13年3月5日)
您可以使用
cv2.__file__
获取模块的路径,然后使用os.path解析符号链接并执行一些路径操作。这一行代码返回Mac OS homebrew安装中的haarcascades文件目录。它也可以在其他装置上工作。check this link
您可以使用sys.platform来确定平台,并根据sys.platform的返回设置不同的默认路径
似乎没有希望有一个单一的机制可以跨时间和空间(版本和平台/环境)进行移植,但有一些进展-我不知道哪个版本引入了它,但4.0有:
cv2.data.haarcascades
-指向目录的字符串,例如:但不幸的是,对于3.2.x和3.4.x没有这样的模块。。。
所以你可以:
相关问题 更多 >
编程相关推荐