【问题标题】:OpenCV Face Detection breaks when I move my face too quickly当我的脸移动得太快时,OpenCV 人脸检测会中断
【发布时间】:2020-11-29 00:59:56
【问题描述】:

我编写了一个程序来实时检测面部并显示它们。问题是有时代码会中断,我会看到以下错误:

  File "Removed_For_Privacy_Issues/main.py", line 24, in <module>
    cv2.imshow('frame',detectedface)
cv2.error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:376: error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

经过进一步测试,代码只有在视频突然变化时才会中断(比如当我快速移动脸或遮住相机时),有人知道为什么吗?

代码:

import numpy as np
import cv2
import PIL.Image
import PIL.ImageDraw
import time

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
time.sleep(3)

def FacialDetection(image):
    boxes = face_cascade.detectMultiScale(image, 1.1, 3)
    for (x, y, w, h) in boxes:
        cv2.rectangle(image, (x, y), (x+w, y+h), (255, 255, 0), 2)
        return image

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        detectedface = FacialDetection(frame)
        cv2.imshow('frame',detectedface)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break
cap.release()
cv2.destroyAllWindows()

【问题讨论】:

  • 这可能发生在你的脸快要出窗外或者在窗边的时候?在绘制矩形之前给出一些 if 语句。不要让它的点在窗外

标签: python-3.x opencv face-detection


【解决方案1】:

这将解决只是尝试,除了会做的工作

import numpy as np
import cv2
import PIL.Image
import PIL.ImageDraw
import time

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier('Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
time.sleep(3)

def FacialDetection(image):
    boxes = face_cascade.detectMultiScale(image, 1.1, 3)
    for (x, y, w, h) in boxes:
        cv2.rectangle(image, (x, y), (x+w, y+h), (255, 255, 0), 2)
        return image

while(cap.isOpened()):
    try:
        ret, frame = cap.read()
        if ret==True:
            detectedface = FacialDetection(frame)
            cv2.imshow('frame',detectedface)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
        else:
            break
    except:
        print("face not detected")
cap.release()
cv2.destroyAllWindows()

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 2014-09-11
    • 2012-02-04
    • 2013-05-24
    • 1970-01-01
    • 1970-01-01
    • 2012-03-29
    • 2012-12-10
    • 2015-12-18
    相关资源
    最近更新 更多