Область интереса - Обнаружение объекта с SparseOpticalFlow - PullRequest
0 голосов
/ 04 февраля 2020

Я использую SparseOpticalFlow в python. С YOLOv3 я извлек граничные рамки нужного мне объекта.

Теперь я хотел бы дать эти границы алгоритму SOF, чтобы отслеживать только то, что я хочу отслеживать.

Я обнаружил, что есть функция " goodfeaturestotrack ", которая находит углы для отслеживания. Эта функция нуждается в параметре «mask», где она говорит: «mask - необязательная область интереса. Если изображение не пустое (оно должно иметь тип CV_8UC1 и тот же размер, что и изображение), оно указывает область, в которой углы обнаружены ".

prev = cv.goodFeaturesToTrack(prev_gray, mask = None, **feature_params)

Эту "маску" я и ищу.

Мой вопрос: каков параметр для создания маски? Я имею в виду, ему нужны ширина, высота, х, у или что еще? Кто-нибудь может помочь?

Параметры поля границ, заданные из детектора YOLOv3: плавающие x, y, ширина, высота. Где x и y начинаются с верхнего левого угла.

РЕДАКТИРОВАТЬ: Это то, что я пытался сделать.

# Initialize the mask with all black pixels
mask = np.zeros_like(first_frame)
# Get the coordinates and dimensions of the detect_box
x = 82
y = 69
w = 35
h = 55
# Set the selected rectangle within the mask to white
mask[y:y+h, x:x+w] = 255
prev = cv.goodFeaturesToTrack(prev_gray, mask = mask, **feature_params)

Но я получаю эту ошибку ...:

PS C:\Users\YodhResearch\Desktop\GIULIO FERRARI FOLDER\Giulio _ CSV\Py Script\sparse python> python .\sparseopt.py 
Traceback (most recent call last):
  File ".\sparseopt.py", line 32, in <module>
    prev = cv.goodFeaturesToTrack(prev_gray, mask = mask, **feature_params)
cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\featureselect.cpp:365: error: (-215:Assertion failed) _mask.empty() || (_mask.type() == CV_8UC1 && _mask.sameSize(_image)) in 
function 'cv::goodFeaturesToTrack'

EDIT2:

Решение:

width  = cap.get(cv.CAP_PROP_FRAME_WIDTH)   # float
height = cap.get(cv.CAP_PROP_FRAME_HEIGHT)  # float
print("w = %f" % width)
print("h = %f" % height)
# Initialize the mask with all black pixels
mask = [[0]*int(width)]*int(height)
mask = np.asarray(mask)
mask = mask.astype(np.uint8) 

print( np.shape(mask) )
# Get the coordinates and dimensions of the detect_box
x = 82
y = 69
w = 35
h = 55
# Set the selected rectangle within the mask to white
mask[y:y+h, x:x+w] = 255

prev = cv.goodFeaturesToTrack(prev_gray, mask = mask, **feature_params)
# Creates an image filled with zero intensities with the same dimensions as the frame - for later drawing purposes
mask = np.zeros_like(first_frame)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...