Как вырезать область из маски в cv2 python

1

У меня есть видео из черного экрана и белого шара. Я хочу отслеживать центр белого шара в каждом кадре (выводится как x, y координата). Поэтому я пытаюсь использовать cv2.HoughCircles но независимо от того, как я настроил параметр, я не получу 100% отслеживание.

Поэтому у меня есть другая идея. Потому что, когда в среднем каждый пиксель формы круга получит центральную точку круга. Я решил попробовать эту идею. Но зацикливание каждого пикселя до тех пор, пока мы не найдем белый, невозможно. Есть ли способ обрезать (грубо), чтобы получить только белый кругный пиксель? (Например, у меня есть разрешение изображения 1920x1080, но размер шара не будет превышать 50x50 пикселей. Так что было бы слишком медленно обрабатывать его на python. Так есть ли способ обрезать область в изображении размером 50x50? )

Теги:
opencv
image

1 ответ

1
Лучший ответ

Ничего, я понял. Вот мое решение

hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
lower_white = np.array([0,0,150], dtype=np.uint8)
upper_white = np.array([0,0,255], dtype=np.uint8)
mask = cv2.inRange(hsv, lower_white, upper_white)

indcies = np.nonzero(mask)
size = len(set(zip(indcies[0], indcies[1])))
avgX, avgY = 0, 0
minX, minY = 10000, 10000
maxX, maxY = -1, -1

for (x, y) in set(zip(indcies[0], indcies[1])):
    minX, minY, maxX, maxY = min(minX, x), min(minY, y), max(maxX, x), max(maxY, y)
    avgX += x
    avgY += y
avgX /= size
avgY /= size
radius = int(round(max(maxX - minX, maxY - minY)/2))
cv2.circle(image,(int(round(avgY)),int(round(avgX))),radius,(0,255,0),2)
plt.imshow(image)
plt.show()

Ссылка:

  • 0
    Отмечено: область обрезки от (minX, minY) до (maxX, maxY)

Ещё вопросы

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