Veamos cómo dibujar el movimiento de los objetos capturados por la cámara web usando OpenCV. Nuestro programa toma la entrada de video de la cámara web y rastrea los objetos que estamos moviendo. Después de identificar los objetos, hará contornos con precisión. Después de eso, imprimirá todo su dibujo en la pantalla de salida.
python3
# importing the modules import cv2 import numpy as np # set Width and Height of output Screen frameWidth = 640 frameHeight = 480 # capturing Video from Webcam cap = cv2.VideoCapture(0) cap.set(3, frameWidth) cap.set(4, frameHeight) # set brightness, id is 10 and # value can be changed accordingly cap.set(10,150) # object color values myColors = [[5, 107, 0, 19, 255, 255], [133, 56, 0, 159, 156, 255], [57, 76, 0, 100, 255, 255], [90, 48, 0, 118, 255, 255]] # color values which will be used to paint # values needs to be in BGR myColorValues = [[51, 153, 255], [255, 0, 255], [0, 255, 0], [255, 0, 0]] # [x , y , colorId ] myPoints = [] # function to pick color of object def findColor(img, myColors, myColorValues): # converting the image to HSV format imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) count = 0 newPoints = [] # running for loop to work with all colors for color in myColors: lower = np.array(color[0:3]) upper = np.array(color[3:6]) mask = cv2.inRange(imgHSV,lower,upper) x, y = getContours(mask) # making the circles cv2.circle(imgResult, (x,y), 15, myColorValues[count], cv2.FILLED) if x != 0 and y != 0: newPoints.append([x,y,count]) count += 1 return newPoints # contours function used to improve accuracy of paint def getContours(img): _, contours, hierarchy = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) x, y, w, h = 0, 0, 0, 0 # working with contours for cnt in contours: area = cv2.contourArea(cnt) if area > 500: peri = cv2.arcLength(cnt, True) approx = cv2.approxPolyDP(cnt, 0.02 * peri, True) x, y, w, h = cv2.boundingRect(approx) return x + w // 2, y # draws your action on virtual canvas def drawOnCanvas(myPoints, myColorValues): for point in myPoints: cv2.circle(imgResult, (point[0], point[1]), 10, myColorValues[point[2]], cv2.FILLED) # running infinite while loop so that # program keep running until we close it while True: success, img = cap.read() imgResult = img.copy() # finding the colors for the points newPoints = findColor(img, myColors, myColorValues) if len(newPoints)!= 0: for newP in newPoints: myPoints.append(newP) if len(myPoints)!= 0: # drawing the points drawOnCanvas(myPoints, myColorValues) # displaying output on Screen cv2.imshow("Result", imgResult) # condition to break programs execution # press q to stop the execution of program if cv2.waitKey(1) and 0xFF == ord('q'): break
Producción :
Publicación traducida automáticamente
Artículo escrito por romilvishol y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA