-
Notifications
You must be signed in to change notification settings - Fork 0
/
ClimbingWallRouteDetection.py
69 lines (64 loc) · 2.04 KB
/
ClimbingWallRouteDetection.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import cv2
import numpy as np
import threading
import time
import math
routeChosen = False
mask = None
mask_inv = None
b,g,r = 0,0,0
hsv = None
# mouse callback function
def get_route_mask(event,x,y,flags,param):
if event == cv2.EVENT_LBUTTONDBLCLK:
global routeChosen, mask, mask_inv, hsv
routeChosen = not routeChosen
if routeChosen:
color = hsv[y,x]
lower = np.array([0 if color[0] - 10 < 0 else color[0] - 10,
0 if color[1] - 75 < 0 else color[1] - 75,
0 if color[2] - 75 < 0 else color[2] - 75], np.uint8)
upper = np.array([180 if color[0] + 10 > 180 else color[0] + 10,
255 if color[1] + 75 > 255 else color[1] + 75,
255 if color[2] + 75 > 255 else color[2] + 75], np.uint8)
mask = cv2.inRange(hsv, lower, upper)
mask_inv = cv2.bitwise_not(mask)
def change_color(phase):
global b,g,r
b = math.sin((2*math.pi) * (phase/60)) * 127 + 128
g = math.sin((2*math.pi) * (phase/60) + ((2*math.pi)/3)) * 127 + 128
r = math.sin((2*math.pi) * (phase/60) + ((4*math.pi)/3)) * 127 + 128
def find_routes(image):
global hsv
# Create a black image, a window and bind the function to window
img = cv2.imread(image, 1)
rows,cols,channels = img.shape
colorImg = np.zeros((rows,cols,3), np.uint8)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
cv2.namedWindow(image, cv2.WINDOW_NORMAL)
cv2.namedWindow('Wall', cv2.WINDOW_NORMAL)
cv2.namedWindow('ColorMask', cv2.WINDOW_NORMAL)
cv2.namedWindow('Mask', cv2.WINDOW_NORMAL)
cv2.resizeWindow(image, 500, 500)
cv2.setMouseCallback(image, get_route_mask)
phase = 1
while(1):
if routeChosen:
imgRoute = cv2.bitwise_and(img, img, mask = mask_inv)
colorRoute = cv2.bitwise_and(colorImg, colorImg, mask = mask)
newImg = cv2.add(imgRoute,colorRoute)
cv2.imshow(image, newImg)
cv2.imshow('Wall', imgRoute)
cv2.imshow('ColorMask', colorRoute)
cv2.imshow('Mask', mask)
change_color(phase)
colorImg[:,:] = (b,g,r)
if phase == 60:
phase = 0
else:
phase = phase + 1
else:
cv2.imshow(image, img)
if cv2.waitKey(20) & 0xFF == 27:
break
cv2.destroyAllWindows()