Запишите два набора точечных местоположений от события мыши от первого кадра видео - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть видео о ферме коров.Мои цели -

(а) получить углы расположения коровьего загона (коровника)

(б) получить углы контейнера для еды

Вотмой подход, о котором я думаю -

(a)  - capture the frame and freeze on the 1st frame

     - user will manually put the mouse on the corners

     - the x,y location will be saved in a list

     - press "p" key to proceed to the next frame


(b)  - freeze the frame on the second frame

     - user will manually put the mouse on the corners

     - the x,y location will be saved in another list

     - press "c" key to proceed to next frames

У меня уже есть другие коды для выполнения других операций.Я попробовал следующие коды, чтобы получить точку из изображения (не видео).Теперь убедитесь, как поставить видео на паузу и использовать существующий кадр в качестве входного изображения

import cv2, numpy as np

ix,iy = -1,-1
# the list of locations
mouse = []
def get_location(event,x,y,flags,param):
    global ix,iy
    if event == cv2.EVENT_LBUTTONDBLCLK:
        ix,iy = x,y
        mouse.append([x,y])

# take image and name it
img = cv2.imread("colo.png",0)
cv2.namedWindow('image')
cv2.setMouseCallback('image',get_location)


while(1):
    cv2.imshow('image',img)
    k = cv2.waitKey(20) & 0xFF
    if k == 27:
        break
    elif k == ord('a'):
        print (ix,iy)
print (mouse)
cv2.destroyAllWindows()

Ответы, которые я ищу, таковы: (a) как зафиксировать кадр на определенном номере кадра и (b)cv2.setMouseCallback ('image', get_location) принимает строку в качестве первого аргумента, как вставить кадр в качестве аргумента здесь?

1 Ответ

1 голос
/ 27 апреля 2019

а) используйте переменную, чтобы установить waitKey в 0. Только после нажатия клавиши будет показан следующий кадр.Измените переменную после нажатия «c», чтобы видео работало нормально:

waitTime = 0

k = cv2.waitKey(waitTime)
if k == ord('c'):
    waitTime = 20

b) строковый аргумент - это имя окна, к которому присоединен обратный вызовк.Чтобы «вставить рамку», просто наберите imshow в окне.Код, который у вас есть, в этом отношении выглядит хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...