parent
8431d9c300
commit
af89067a80
@ -1,41 +1,53 @@ |
||||
import cv2 |
||||
import numpy as np |
||||
|
||||
# Подключаемся к камере |
||||
cam = cv2.VideoCapture(0) |
||||
|
||||
while True: |
||||
_, frame = cam.read() |
||||
# Перевод изображения в HSV |
||||
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) |
||||
# Немного размываем изображение |
||||
hsv = cv2.blur(hsv,(5,5)) |
||||
|
||||
# Задаем параметр из прошлого примера |
||||
mask = cv2.inRange(hsv, (78,154,93),(86,224,255)) |
||||
|
||||
# С помощью специального алгоритма ищем контур обьекта |
||||
(contours, hierarchy) = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) |
||||
# Отрисовывем найденый контур чтобы его было видно на экране |
||||
cv2.drawContours(frame, contours, -1, (255,0,0), 3, cv2.LINE_AA, hierarchy, 1 ) |
||||
|
||||
max_radius = 0 |
||||
center = (0,0) |
||||
|
||||
# Находим контур с максимальным радиусом |
||||
for contour in contours: |
||||
(x,y),radius = cv2.minEnclosingCircle(contour) |
||||
if max_radius < int(radius): |
||||
max_radius = int(radius) |
||||
center = (int(x),int(y)) |
||||
|
||||
|
||||
# Описываем максимальный контур кругом |
||||
frame = cv2.circle(frame,center,max_radius,(0,255,0),2) |
||||
|
||||
S = 3.1415 * max_radius * max_radius |
||||
# Выводим на эран площадь круга |
||||
cv2.putText(frame, str(S), (30, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2) |
||||
|
||||
# Выводим сообщение если круг слишком близко или далеко |
||||
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) |
||||
|
||||
# Промежуточные изображения |
||||
#cv2.imshow("Image with opening", mask) |
||||
#cv2.imshow("Image with closing", hsv) |
||||
|
||||
|
||||
# выводим то что получилось вместе с текстом и контуром |
||||
cv2.imshow("Image", frame) |
||||
|
||||
k = cv2.waitKey(2) |
@ -1,46 +0,0 @@ |
||||
import cv2 |
||||
import numpy as np |
||||
|
||||
# NOT WORCK !!!! |
||||
|
||||
def find_contours_of_cards(image): |
||||
blurred = cv2.GaussianBlur(image, (3, 3), 0) |
||||
T, thresh_img = cv2.threshold(blurred, 215, 255, |
||||
cv2.THRESH_BINARY) |
||||
(cnts, _) = cv2.findContours(thresh_img, |
||||
cv2.RETR_EXTERNAL, |
||||
cv2.CHAIN_APPROX_SIMPLE) |
||||
return cnts |
||||
|
||||
def find_coordinates_of_cards(cnts, image): |
||||
cards_coordinates = {} |
||||
for i in range(0, len(cnts)): |
||||
x, y, w, h = cv2.boundingRect(cnts[i]) |
||||
if w > 20 and h > 30: |
||||
img_crop = image[y - 15:y + h + 15, |
||||
x - 15:x + w + 15] |
||||
cards_name = find_features(img_crop) |
||||
cards_coordinates[cards_name] = (x - 15, |
||||
y - 15, x + w + 15, y + h + 15) |
||||
return cards_coordinates |
||||
|
||||
|
||||
|
||||
cam = cv2.VideoCapture(0) |
||||
|
||||
while True: |
||||
_, frame = cam.read() |
||||
img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) |
||||
img = cv2.GaussianBlur(img, (3, 3), 0) |
||||
# Все больше 215 станет 255, все что меньше 0 |
||||
T, thresh_img = cv2.threshold(img, 215, 255, cv2.THRESH_BINARY) |
||||
|
||||
|
||||
cv2.imshow("Image", img) |
||||
cv2.imshow("Image with opening", thresh_img) |
||||
#cv2.imshow("Image with closing", res) |
||||
|
||||
k = cv2.waitKey(2) |
||||
if k == 27: |
||||
cv2.destroyAllWindows() |
||||
break |
Loading…
Reference in new issue