You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
alphabot2/example/circul_detect.py

56 lines
2.2 KiB

4 years ago
import cv2
import numpy as np
4 years ago
# Подключаемся к камере
4 years ago
cam = cv2.VideoCapture(0)
while True:
_, frame = cam.read()
4 years ago
# Перевод изображения в HSV
4 years ago
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
4 years ago
# Немного размываем изображение
4 years ago
hsv = cv2.blur(hsv,(5,5))
4 years ago
# Задаем параметр из прошлого примера
4 years ago
mask = cv2.inRange(hsv, (78,154,93),(86,224,255))
4 years ago
# С помощью специального алгоритма ищем контур обьекта
4 years ago
(contours, hierarchy) = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
4 years ago
# Отрисовывем найденый контур чтобы его было видно на экране
4 years ago
cv2.drawContours(frame, contours, -1, (255,0,0), 3, cv2.LINE_AA, hierarchy, 1 )
max_radius = 0
center = (0,0)
4 years ago
# Находим контур с максимальным радиусом
4 years ago
for contour in contours:
(x,y),radius = cv2.minEnclosingCircle(contour)
if max_radius < int(radius):
max_radius = int(radius)
center = (int(x),int(y))
4 years ago
# Описываем максимальный контур кругом
4 years ago
frame = cv2.circle(frame,center,max_radius,(0,255,0),2)
S = 3.1415 * max_radius * max_radius
4 years ago
# Выводим на эран площадь круга
4 years ago
cv2.putText(frame, str(S), (30, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
4 years ago
# Выводим сообщение если круг слишком близко или далеко
4 years ago
if S > 100:
if S > 10000:
cv2.putText(frame, "UP", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
elif S < 5000:
cv2.putText(frame, "DOWN", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
4 years ago
# Промежуточные изображения
4 years ago
#cv2.imshow("Image with opening", mask)
#cv2.imshow("Image with closing", hsv)
4 years ago
# выводим то что получилось вместе с текстом и контуром
4 years ago
cv2.imshow("Image", frame)
k = cv2.waitKey(2)
if k == 27:
cv2.destroyAllWindows()
break