Python - AttributeError: 'module' object has no attribute 'QueryFrame'
Python - AttributeError: 'module' object has no attribute 'QueryFrame'
我是 OpenCV 的新手,但我需要找到一种使用网络摄像头检测人脸的方法。我从 here 中找到了以下代码。这是原始代码。我正在使用 Python 2.7
和 opencv 3.0.0-beta
版本和 Windows 8.1.
import cv2 as cv
import time
import Image
def DetectFace(image, faceCascade):
min_size = (20,20)
image_scale = 2
haar_scale = 1.1
min_neighbors = 3
haar_flags = 0
grayscale = cv.CreateImage((image.width, image.height), 8, 1)
smallImage = cv.CreateImage(
(
cv.Round(image.width / image_scale),
cv.Round(image.height / image_scale)
), 8 ,1)
cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)
cv.Resize(grayscale, smallImage, cv.CV_INTER_LINEAR)
cv.EqualizeHist(smallImage, smallImage)
faces = cv.HaarDetectObjects(
smallImage, faceCascade, cv.CreateMemStorage(0),
haar_scale, min_neighbors, haar_flags, min_size)
if faces:
for ((x, y, w, h), n) in faces:
pt1 = (int(x * image_scale), int(y * image_scale))
pt2 = (int((x + w) * image_scale), int((y + h) * image_scale))
cv.Rectangle(image, pt1, pt2, cv.RGB(255, 0, 0), 5, 8, 0)
return image
capture = cv.CaptureFromCAM(0)
faceCascade = cv.Load("haarcascades/haarcascade_frontalface_alt.xml")
while (cv.WaitKey(15)==-1):
img = cv.QueryFrame(capture)
image = DetectFace(img, faceCascade)
cv.ShowImage("face detection test", image)
cv.ReleaseCapture(capture)
当我 运行 运行这个程序时,我遇到错误提示,没有名为 Image 的模块。我对其进行了评论并再次 运行 并对代码进行了以下更改。
capture = cv.CaptureFromCAM(0)
到 capture = cv.VideoCapture(0)
和
根据弹出的错误WaitKey
到waitKey
但现在它说 AttributeError: 'module' object has no attribute 'QueryFrame'
我觉得是版本问题什么的。我也已经包含了 haarcascades
个文件。请帮助我更正该错误并运行 很好地编写此代码。正如我提到的,我是 opencv 的新手。
cv2 没有方法 QueryFrame,它位于 cv.
import cv
img = cv.QueryFrame(capture)
在cv2
中,您使用:
result, img = capture.read() #capture is a cv2.VideoCapture instance
而不是 QueryFrame
。
您还可以使用
将要捕获的帧排队
capture.grab()
其次是
result, img = capture.retrieve()
实际检索它。如果你想排队一个帧,请使用第二种方法,然后在等待它的同时做其他事情。
编辑:
你显然只是在尝试 运行 使用 OpenCV2 的一堆 OpenCV1 函数,如果你不阅读 OpenCV2 documentation 以了解函数有哪些,将会遇到很多问题改变了,什么没有改变。 Whosebug 不是 "convert this old code" 服务,因此我不会逐一介绍您程序中的每一个旧功能。
但是,为了回答您的后续问题,在 OpenCV2 中,建议仅使用 numpy.zeros()
函数(而不是旧的 cv.CreateImage
函数)创建图像。
我是 OpenCV 的新手,但我需要找到一种使用网络摄像头检测人脸的方法。我从 here 中找到了以下代码。这是原始代码。我正在使用 Python 2.7
和 opencv 3.0.0-beta
版本和 Windows 8.1.
import cv2 as cv
import time
import Image
def DetectFace(image, faceCascade):
min_size = (20,20)
image_scale = 2
haar_scale = 1.1
min_neighbors = 3
haar_flags = 0
grayscale = cv.CreateImage((image.width, image.height), 8, 1)
smallImage = cv.CreateImage(
(
cv.Round(image.width / image_scale),
cv.Round(image.height / image_scale)
), 8 ,1)
cv.CvtColor(image, grayscale, cv.CV_BGR2GRAY)
cv.Resize(grayscale, smallImage, cv.CV_INTER_LINEAR)
cv.EqualizeHist(smallImage, smallImage)
faces = cv.HaarDetectObjects(
smallImage, faceCascade, cv.CreateMemStorage(0),
haar_scale, min_neighbors, haar_flags, min_size)
if faces:
for ((x, y, w, h), n) in faces:
pt1 = (int(x * image_scale), int(y * image_scale))
pt2 = (int((x + w) * image_scale), int((y + h) * image_scale))
cv.Rectangle(image, pt1, pt2, cv.RGB(255, 0, 0), 5, 8, 0)
return image
capture = cv.CaptureFromCAM(0)
faceCascade = cv.Load("haarcascades/haarcascade_frontalface_alt.xml")
while (cv.WaitKey(15)==-1):
img = cv.QueryFrame(capture)
image = DetectFace(img, faceCascade)
cv.ShowImage("face detection test", image)
cv.ReleaseCapture(capture)
当我 运行 运行这个程序时,我遇到错误提示,没有名为 Image 的模块。我对其进行了评论并再次 运行 并对代码进行了以下更改。
capture = cv.CaptureFromCAM(0)
到 capture = cv.VideoCapture(0)
和
根据弹出的错误WaitKey
到waitKey
但现在它说 AttributeError: 'module' object has no attribute 'QueryFrame'
我觉得是版本问题什么的。我也已经包含了 haarcascades
个文件。请帮助我更正该错误并运行 很好地编写此代码。正如我提到的,我是 opencv 的新手。
cv2 没有方法 QueryFrame,它位于 cv.
import cv
img = cv.QueryFrame(capture)
在cv2
中,您使用:
result, img = capture.read() #capture is a cv2.VideoCapture instance
而不是 QueryFrame
。
您还可以使用
将要捕获的帧排队capture.grab()
其次是
result, img = capture.retrieve()
实际检索它。如果你想排队一个帧,请使用第二种方法,然后在等待它的同时做其他事情。
编辑:
你显然只是在尝试 运行 使用 OpenCV2 的一堆 OpenCV1 函数,如果你不阅读 OpenCV2 documentation 以了解函数有哪些,将会遇到很多问题改变了,什么没有改变。 Whosebug 不是 "convert this old code" 服务,因此我不会逐一介绍您程序中的每一个旧功能。
但是,为了回答您的后续问题,在 OpenCV2 中,建议仅使用 numpy.zeros()
函数(而不是旧的 cv.CreateImage
函数)创建图像。