这是我在这里的第一个问题,所以我希望我以适当的方式提问。
我正在装有Windows 10的笔记本电脑上运行Python 3.6.3(Anaconda 64位安装)。
我有一个主例程,除其他外,该例程通过cv2.VideoCapture()捕获视频。另一个文件存储执行面部检测的功能。当我从主程序调用该函数时,收到以下错误消息: 错误:函数cv :: CascadeClassifier :: detectMultiScale中的(-215)!empty()
这是代码的简化版本:
主程序:
from facecounter import facecounter
import cv2
cap = cv2.VideoCapture(0)
x = 0
while x < 20:
ret, frame = cap.read()
print(type(frame))
output = facecounter(frame, ret)
cv2.imshow("output", output)
cv2.waitKey()
x += 1
cv2.destroyAllWindows()
cap.release()
存储在facecounter.py中的函数:
def facecounter(frame, ret):
import cv2
face_classifier = cv2.CascadeClassifier('cascades/haarcascade_frontalface_default.xml
if ret is True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_classifier.detectMultiScale(gray, 1.3, 5)
number_faces = len(faces)
return number_faces
我已经搜索了此错误,据我所知,这是由于缺少适当的以numpy.array格式提供给cv2.detectMultiScale()的图像。因此,我尝试进一步简化代码以隔离错误:
主例程:
from file import function
import cv2
cap = cv2.VideoCapture(0)
x = 0
while x<300:
ret, frame = cap.read()
output = file(ret, frame)
cv2.imshow("window", output)
print(output)
cv2.destroyAllWindows()
cap.release()
函数存储在file.py中:
import cv2
def function(ret, frame):
output = frame
return output
当我运行此简化版本的代码时,没有出现错误,但是,尽管每次迭代都能打印出正确的数组,但是使用cv2.imshow()创建的窗口显示为灰色图像。
非常感谢您的帮助。在此先多谢!
答案 0 :(得分:0)
您需要修复简化版本。
function
,而不是file
。cv2.waitKey(1)
。x
。这是固定代码
from file import function
import cv2
cap = cv2.VideoCapture(0)
x = 0
while x<300:
ret, frame = cap.read()
output = function(ret, frame)
cv2.imshow("window", output)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
print(output)
x += 1
cv2.destroyAllWindows()
cap.release()
也不要将您的python文件命名为file.py
,将其命名为image_processing.py
或与Python使用的名称不冲突的方法。