Обнаружение BLOB + обнаружение переднего плана

59
6

Различие кадров (определение переднего плана) отлично работает. Теперь я хочу добавить в него дополнительную функцию, которая является обнаружением blob. В принципе, моя идея состоит в том, чтобы сформировать круг blob на обнаруженном движении объекта.

Это мой код:

import cv2

cap = cv2.VideoCapture('14.mp4')
ret, current_frame = cap.read()
previous_frame = current_frame

# Setup SimpleBlobDetector parameters.
params = cv2.SimpleBlobDetector_Params()

# Change blob detection thresholds
params.minThreshold = 200
params.maxThreshold = 255

params.minDistBetweenBlobs = 100

# Filter by Area.
params.filterByArea = True
params.minArea = 1200
params.maxArea = 40000

# Filter by Circularity
params.filterByCircularity = False
params.minCircularity = 0.1

# Filter by Convexity
params.filterByConvexity = False
params.minConvexity = 0.87

# Filter by Inertia
params.filterByInertia = True
params.minInertiaRatio = 0.02

# Create a detector with the parameters
detector = cv2.SimpleBlobDetector_create(params)

#Detect blobs
keypoints = detector.detect(current_frame)

while(cap.isOpened()):
current_frame_gray = cv2.cvtColor(current_frame, cv2.COLOR_BGR2GRAY)
previous_frame_gray = cv2.cvtColor(previous_frame, cv2.COLOR_BGR2GRAY)

frame_diff = cv2.absdiff(current_frame_gray,previous_frame_gray)

im_with_keypoints = cv2.drawKeypoints(frame_diff, keypoints, np.array([]), (0,0,255), cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)

cv2.imshow('frame diff ',im_with_keypoints )
if cv2.waitKey(1) & 0xFF == ord('q'):
break

previous_frame = current_frame.copy()
ret, current_frame = cap.read()
keypoints = detector.detect(current_frame)

cap.release()
cv2.destroyAllWindows()

Моя ошибка заключается в том, что "изображение не является числовым, а не скалярным",

спросил(а) 2016-07-09T11:05:00+03:00 4 года, 4 месяца назад
1
Решение
101

Вы передаете свой cap переменной в функции detector.detect, но cap приходит из cv2.VideoCapture, которая возвращает CvCapture объект, а не массив Numpy.

Вместо этого вы должны использовать current_frame возвращаемый .read().

keypoints = detector.detect(current_frame)

ответил(а) 2016-07-09T11:21:00+03:00 4 года, 4 месяца назад
42

Вы должны импортировать библиотеку "numpy"

Вы можете istall это, на вашем cmd (win + R, cmd, введите): pip install numpy


И напишите в своем коде: import numpy as np

ответил(а) 2017-05-22T16:49:00+03:00 3 года, 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема