python – return _cv.cvHaarDetectObjects(* args)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – return _cv.cvHaarDetectObjects(* args),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3732字,纯文字阅读大概需要6分钟。
内容图文
我试图在ubuntu上使用opencv python从网络摄像头中检测到脸部.我得到了这个在线代码,并试图运行这个程序,我得到了as NULL数组指针传递,我想它无法从网络摄像头捕获视频,但使用相同的代码(只捕获相机),我得到相机和它捕获了视频.这是我的代码:
import cv
from opencv import highgui
HAAR_CASCADE_PATH = "/home/OpenCV-2.3.1/data/haarcascades/haarcascade_frontalface_default.xml"
CAMERA_INDEX = 0
def detect_faces(image):
faces = []
detected = cv.HaarDetectObjects(image, cascade, storage, 1.2, 2, cv.CV_HAAR_DO_CANNY_PRUNING, (100,100))
if detected:
for (x,y,w,h),n in detected:
faces.append((x,y,w,h))
return faces
if __name__ == "__main__":
cv.NamedWindow("Video", cv.CV_WINDOW_AUTOSIZE)
capture = cv.CaptureFromCAM(0)
storage = cv.CreateMemStorage()
cascade = cv.Load(HAAR_CASCADE_PATH)
print cascade
faces = []
i = 0
c = -1
while (c == -1):
image = cv.QueryFrame(capture)
# Only run the Detection algorithm every 5 frames to improve performance
#if i%5==0:
faces = detect_faces(image)
#print image
for (x,y,w,h) in faces:
cv.Rectangle(image, (x,y), (x+w,y+h), 255)
cv.ShowImage("w1", image)
i += 1
我得到的错误是:
Traceback (most recent call last):
File "/home/OpenCV-2.3.1/webcam_try.py", line 38, in <module>
faces = detect_faces(frame)
File "/home/OpenCV-2.3.1/webcam_try.py", line 13, in detect_faces
detected = cv.cvHaarDetectObjects(frame, cascade, storage, 1.2, 2, cv.CV_HAAR_DO_CANNY_PRUNING,(100,100))
File "/usr/lib/pymodules/python2.7/opencv/cv.py", line 1626, in cvHaarDetectObjects
return _cv.cvHaarDetectObjects(*args)
NotImplementedError: Wrong number of arguments for overloaded function 'cvHaarDetectObjects'.
Possible C/C++ prototypes are:
cvHaarDetectObjects_Shadow(CvArr const *,CvHaarClassifierCascade *,CvMemStorage *,double,int,int,CvSize)
cvHaarDetectObjects_Shadow(CvArr const *,CvHaarClassifierCascade *,CvMemStorage *,double,int,int)
cvHaarDetectObjects_Shadow(CvArr const *,CvHaarClassifierCascade *,CvMemStorage *,double,int)
cvHaarDetectObjects_Shadow(CvArr const *,CvHaarClassifierCascade *,CvMemStorage *,double)
cvHaarDetectObjects_Shadow(CvArr const *,CvHaarClassifierCascade *,CvMemStorage *)
解决方法:
你的代码对我来说很好(虽然我运行OpenCV v2.4.3而不是你的版本,2.3.1).我上周开始使用相同的在线代码(here发布),我最终放弃使用cv并切换到新的cv2库.
所以.我已经更新了你的代码,以便它使用新的cv2接口.
用于运行Haar Cascade Classifiers的cv2 Python接口更易于使用.查看cv2.CascadeClassifier.detectMultiScale()here的文档.新的cv2界面显着简化了代码.以下是亮点:
>您不再需要担心创建内存缓冲区.
>从detectMultiScale返回的结果以超级有用的形式返回,无需旧代码的detect_faces()函数!
>您只需提供一个参数:图像本身.所有其他参数都是可选的.我已经在下面的修订代码中包含了您使用的参数,但随时可以删除它们.
一条建议:如果你的代码运行缓慢,你可以做的最好的事情之一是增加minSize.对于我的网络摄像头,使用(100,100)会导致超慢的帧速率约为0.2fps.将它改为(300,300)将其提升到可观的20fps.
代码应该适用于您现有的安装,因为您运行的是2.3.1,但如果没有,则尝试升级到最新版本.
import cv2
import cv2.cv as cv
HAAR_CASCADE_PATH = "/home/OpenCV-2.3.1/data/haarcascades/haarcascade_frontalface_default.xml";
CAMERA_INDEX = 0;
if __name__ == "__main__":
# Open window, load webcam and load Haar cascade classifier
cv2.namedWindow("Video", cv.CV_WINDOW_AUTOSIZE)
capture = cv2.VideoCapture(CAMERA_INDEX);
cascade = cv2.CascadeClassifier(HAAR_CASCADE_PATH);
i = 0;
while True:
# Grab frame from webcam
retVal, image = capture.read(); # note: ignore retVal
# Only run the Detection algorithm every 5 frames to improve performance
#if i%5==0:
faces = cascade.detectMultiScale(image, scaleFactor=1.2,
minNeighbors=2, minSize=(100,100),
flags=cv.CV_HAAR_DO_CANNY_PRUNING);
# Draw rectangles on image, and then show it
for (x,y,w,h) in faces:
cv2.rectangle(image, (x,y), (x+w,y+h), 255)
cv2.imshow("Video", image)
i += 1;
内容总结
以上是互联网集市为您收集整理的python – return _cv.cvHaarDetectObjects(* args)全部内容,希望文章能够帮你解决python – return _cv.cvHaarDetectObjects(* args)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。