Выберите ограничивающую рамку на изображении и аннотируйте - PullRequest
1 голос
/ 07 ноября 2019

Я работаю над проектом, в котором я хотел бы взять ограничивающий прямоугольник, уже нарисованный на предмете, и выбрать его (щелчком мыши), чтобы у меня было что-то вроде текстового диалогового окна, наведенного над изображением, чтобы я могзатем введите метку. Я уже использую OpenCV, чтобы обнаружить объект и нарисовать начальную ограничивающую рамку на нем, используя классификатор Haar Cascade, но пока я не могу найти правильную комбинацию директив OpenCV, чтобы иметь возможность выбрать эту ограничивающую рамку и затем аннотировать ее,Соответствующий код ниже.

faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
)

# Draw a rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

Буду признателен за несколько хороших указателей. Спасибо.

1 Ответ

0 голосов
/ 07 ноября 2019

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

Во-первых, чтобы иметь возможность обрабатывать ввод с помощью мыши, вы должны создать именованное окно. Затем вы можете прикрепить mouseCallback к этому окну:

# create window
cv2.namedWindow("Frame") 
# attach a callback to the window, that calls 'getFace'
cv2.setMouseCallback("Frame", getFace) 

В методе getFace вы проверяете нажатие кнопки, затем просматриваете грани и проверяете, находится ли x / y мыши в пределахограничительная рамка лица. Если это так, вернуть индекс лица.

def getFace(event, x,y, flags, param):
        if event == cv2.EVENT_LBUTTONDOWN:
                # if mousepressed
                for i in range(len(faces)): 
                        # loop through faces
                        (face_x,face_y,w,h) = faces[i]
                        # unpack variables
                        if x > face_x and x < face_x + w:
                                # if x is within x-range of face
                                if y > face_y and y < face_y + h:
                                        # if y is also in y-range of face
                                        return i
                                        # then return the index of the face
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...