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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
import numpy as np
import cv2
def nothing (x):
pass
cap = cv2.VideoCapture(0)
cv2.namedWindow("Trackbars")
cap.set(3,320)
cap.set(4,240)
#print (cap.get(5))
cv2.createTrackbar("L - H","Trackbars",0,255,nothing)
cv2.createTrackbar("L - S","Trackbars",0,255,nothing)
cv2.createTrackbar("L - V","Trackbars",0,255,nothing)
cv2.createTrackbar("U - H","Trackbars",0,255,nothing)
cv2.createTrackbar("U - S","Trackbars",0,255,nothing)
cv2.createTrackbar("U - V","Trackbars",0,255,nothing)
while True:
_, frame = cap.read()
blurred = cv2.GaussianBlur(frame, (11, 11), 0)
hsv = cv2.cvtColor(blurred, cv2.COLOR_BGR2HSV)
l_h = cv2.getTrackbarPos("L - H","Trackbars")
l_s = cv2.getTrackbarPos("L - S","Trackbars")
l_v = cv2.getTrackbarPos("L - V","Trackbars")
u_h = cv2.getTrackbarPos("U - H","Trackbars")
u_s = cv2.getTrackbarPos("U - S","Trackbars")
u_v = cv2.getTrackbarPos("U - V","Trackbars")
lower = {'red':(1, 220, 163), 'yellow':(l_h, l_s, l_v), 'green':(l_h, l_s, l_v)} #assign new item
upper = {'red':(60, 255, 255), 'yellow':(u_h,u_s,u_v), 'green':(u_h,u_s,u_v)}
# define standard colors for circle around the object
colors = {'red':(0,0,255), 'yellow':(0, 255, 217), 'green':(0,255,0)}
#for each color in dictionary check object in frame
for key, value in upper.items():
# construct a mask for the color from dictionary`1, then perform
# a series of dilations and erosions to remove any small
# blobs left in the mask
kernel = np.ones((9,9),np.uint8)
mask = cv2.inRange(hsv, lower[key], upper[key])
mask = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
# find contours in the mask and initialize the current
# (x, y) center of the ball
cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)[-2]
center = None
# only proceed if at least one contour was found
#print(len(cnts))
if len(cnts) > 0:
# find the largest contour in the mask, then use
# it to compute the minimum enclosing circle and
# centroid
c = max(cnts, key=cv2.contourArea)
((x, y), radius) = cv2.minEnclosingCircle(c)
M = cv2.moments(c)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
# only proceed if the radius meets a minimum size. Correct this value for your object's size
#print radius
if (radius > 0.5):
# draw the circle and centroid on the frame,
# then update the list of tracked points
cv2.circle(frame, (int(x), int(y)), int(radius), colors[key], 2)
cv2.putText(frame,key + " light", (cX+40, cY), cv2.FONT_HERSHEY_SIMPLEX, 0.6,colors[key],2)
# show the frame to our screen
cv2.imshow("Frame", frame)
cv2.imshow("Mask", mask)
key = cv2.waitKey(1) & 0xFF
# if the 'q' key is pressed, stop the loop
if key == ord("q"):
break
# cleanup the camera and close any open windows
camera.release()
cv2.destroyAllWindows() |
Partager