矩形感兴趣的区域超出范围时发生错误-OpenCV

时间:2018-06-23 16:07:35

标签: python opencv face-detection dlib imshow

我的脚本检测到人脸,然后使用dlib相关跟踪器算法对其进行跟踪。

我正在尝试使用cv2.imshow(track_index, face_img)在单独的窗口中显示每个被跟踪的脸部,其中face_image是使用{{1}从视频捕获的帧中裁剪出的脸部的感兴趣区域}坐标。

部分代码如下所示:

dlib.rectangle

这可以正常工作,直到人脸超出范围或首次出现在边框边界之一之外。在这种情况下,程序将停止并引发大小错误。

                    #get the updated tracker position
                    pos = tracker.get_position()
                    pos = dlib.rectangle(
                        int(pos.left()),
                        int(pos.top()),
                        int(pos.right()),
                        int(pos.bottom()),
                    )
                    #draw a bounding box around the tracked face
                    cv2.rectangle(image, (pos.left(), pos.top()), (pos.right(), pos.bottom()),
                                  (100, 200, 100))
                    #crop the face from the frame
                    face_img = image[pos.top():pos.bottom(),pos.left():pos.right()]
                    #refers to the number of the track created
                    track_index = "track no.{}".format(trc - i)
                    font = cv2.FONT_HERSHEY_TRIPLEX
                    cv2.putText(image, track_index, (pos.left(), pos.bottom() +12), font, 0.5, (255, 255, 0))
                    #show the tracked face
                    cv2.imshow(track_index, face_img)

如何强制框架边框内的ROI阻止此错误的发生?

1 个答案:

答案 0 :(得分:1)

检查ROI的边界。

h,w = image.shape[:2]
face_img = image[max(0,pos.top()):min(pos.bottom(),h),max(0,pos.left()):min(pos.right(),w)]