Python Opencv从较小框架绘制矩形

nkcskrwz  于 2023-02-02  发布在  Python
关注(0)|答案(1)|浏览(134)

我目前正在使用MTCNN进行人脸检测算法的研究。
使用下面的代码,我可以显示包含我的脸的帧:

`def run_detection(fast_mtcnn):
    frames = []
    frames_processed = 0
    faces_detected = 0
    batch_size = 60
    start = time.time()

    cap = cv2.VideoCapture(0)

    while True:
        __, frame = cap.read()
        frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
        frames.append(frame)

        faces = fast_mtcnn(frames)

        frames_processed += len(frames)
        faces_detected += len(faces)
        frames = []
        if len(faces) > 0:
            for face in faces:
                cv2.imshow('frame',face)
                
        print(
            f'Frames per second: {frames_processed / (time.time() - start):.3f},',
            f'faces detected: {faces_detected}\r',
            end=''
        )
        if cv2.waitKey(1) &0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()`

顺便说一句,cv2.imshow('frame',face)只是让我把一些价值在那里,因为我想得到它的bouding框。
它看起来像这样(请原谅我的愚蠢的表情):
enter image description here
这我只是为了表明,它正在检测的脸,并采取了帧有关我的脸。
我面临的挑战是,如何获取较小的帧face(包含我的脸),并获得它的边缘坐标,以便为frame中的每个人绘制一个边界框。
我尝试了以下方法:

cv2.rectangle(frame,
                          (face[0], face[1]),
                          (face[0]+face[2], face[1] + face[3]),
                          (0,155,255),
                          2)

我想这是完全错误的。

erhoui1w

erhoui1w1#

解决方案取决于人脸检测系统返回点的方式,而人脸检测系统根据您使用的库可能会有所不同。在 * 这种 * 情况下,检测到的人脸包含以下信息x, y, w, h = face,其中xy是点,w是边界框的宽度,h是高度。
因此,可以按如下方式绘制面的矩形:

cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)

相关问题