这段代码(在views.py中)由URL触发。导入cv2没有问题。(在添加了所有必要的库之后,使用virtualenvwrapper尝试相同的事情会显示相同的结果)相机初始化并且......
def caminit(request):
cam.open(0)
img=cam.read()
cv2.imwrite("snap"+".jpg",img[1])
cam.release() #takes the instant pic
faceCascade =cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
在检查
print type(faceCascade)
时,返回的是<type 'cv2.CascadeClassifier'>
。这个对象已经被创建。在同一个
caminit
中继续前进。image = cv2.imread("snap.jpg")
# when checked with image.dtype it shows correct uint8 also image.shape shows correct data {Eg: (480, 640, 3)}
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detect faces in the image
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)
现在是关键部分“寻找面数”
print "Found {0} faces!".format(len(faces))
终端输出:
Found 0 faces!
为什么会出现这种情况?
我尝试通过在终端中打印来进行调试。我已经在注释中提到了它们。使用的相机是我的笔记本电脑(HP envy)相机,可以拍摄分辨率为640x480的快照。
我怀疑在faceCascade.detectMultiScale(..)
块中需要调整一些内容(参数)。我尝试过scalefactor = 1.000001
和minNeighbors = 3
,但都没有成功。