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