Ошибка, когда прямоугольная область интереса выходит за границы - opencv

1

Мой скрипт обнаруживает лицо, а затем отслеживает его с помощью алгоритма коррелятора корреляции dlib.

Я пытаюсь показать каждое отслеживаемое лицо в отдельном окне, используя cv2.imshow(track_index, face_img) где face_image - область интереса лица, обрезанного из кадра, снятого с видео, с использованием координат 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)

Это прекрасно работает до тех пор, пока лицо не выйдет за рамки или не появится в первый раз за пределами одной из границ рамки. В этом случае программа останавливается и выдает ошибку размера.

Traceback (most recent call last):
  File "/home/Developing space/facetrack/hog_detect_face_track.py", line 44, in <module>
    cv2.imshow(track_index, face_img)
cv2.error: OpenCV(3.4.1) /io/opencv/modules/highgui/src/window.cpp:356: error: (-215) size.width>0 && size.height>0 in function imshow

Как я могу заставить ROI внутри границ рамки останавливать эту ошибку?

Теги:
opencv
dlib
imshow
face-detection

1 ответ

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)]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню