From 854ca72a13b60010752d77536863e830216efa70 Mon Sep 17 00:00:00 2001 From: shivamadlakha <47023454+shivamadlakha@users.noreply.github.com> Date: Sun, 4 Oct 2020 21:10:18 +0530 Subject: [PATCH] Multiple Color Detection Project --- Multiple Color Detection Project | 118 +++++++++++++++++++++++++++++++ 1 file changed, 118 insertions(+) create mode 100644 Multiple Color Detection Project diff --git a/Multiple Color Detection Project b/Multiple Color Detection Project new file mode 100644 index 0000000000..485c6c09c9 --- /dev/null +++ b/Multiple Color Detection Project @@ -0,0 +1,118 @@ +# Python code for Multiple Color Detection + + +import numpy as np +import cv2 + + +# Capturing video through webcam +webcam = cv2.VideoCapture(0) + +# Start a while loop +while(1): + + # Reading the video from the + # webcam in image frames + _, imageFrame = webcam.read() + + # Convert the imageFrame in + # BGR(RGB color space) to + # HSV(hue-saturation-value) + # color space + hsvFrame = cv2.cvtColor(imageFrame, cv2.COLOR_BGR2HSV) + + # Set range for red color and + # define mask + red_lower = np.array([136, 87, 111], np.uint8) + red_upper = np.array([180, 255, 255], np.uint8) + red_mask = cv2.inRange(hsvFrame, red_lower, red_upper) + + # Set range for green color and + # define mask + green_lower = np.array([25, 52, 72], np.uint8) + green_upper = np.array([102, 255, 255], np.uint8) + green_mask = cv2.inRange(hsvFrame, green_lower, green_upper) + + # Set range for blue color and + # define mask + blue_lower = np.array([94, 80, 2], np.uint8) + blue_upper = np.array([120, 255, 255], np.uint8) + blue_mask = cv2.inRange(hsvFrame, blue_lower, blue_upper) + + # Morphological Transform, Dilation + # for each color and bitwise_and operator + # between imageFrame and mask determines + # to detect only that particular color + kernal = np.ones((5, 5), "uint8") + + # For red color + red_mask = cv2.dilate(red_mask, kernal) + res_red = cv2.bitwise_and(imageFrame, imageFrame, + mask = red_mask) + + # For green color + green_mask = cv2.dilate(green_mask, kernal) + res_green = cv2.bitwise_and(imageFrame, imageFrame, + mask = green_mask) + + # For blue color + blue_mask = cv2.dilate(blue_mask, kernal) + res_blue = cv2.bitwise_and(imageFrame, imageFrame, + mask = blue_mask) + + # Creating contour to track red color + contours, hierarchy = cv2.findContours(red_mask, + cv2.RETR_TREE, + cv2.CHAIN_APPROX_SIMPLE) + + for pic, contour in enumerate(contours): + area = cv2.contourArea(contour) + if(area > 300): + x, y, w, h = cv2.boundingRect(contour) + imageFrame = cv2.rectangle(imageFrame, (x, y), + (x + w, y + h), + (0, 0, 255), 2) + + cv2.putText(imageFrame, "Red Colour", (x, y), + cv2.FONT_HERSHEY_SIMPLEX, 1.0, + (0, 0, 255)) + + # Creating contour to track green color + contours, hierarchy = cv2.findContours(green_mask, + cv2.RETR_TREE, + cv2.CHAIN_APPROX_SIMPLE) + + for pic, contour in enumerate(contours): + area = cv2.contourArea(contour) + if(area > 300): + x, y, w, h = cv2.boundingRect(contour) + imageFrame = cv2.rectangle(imageFrame, (x, y), + (x + w, y + h), + (0, 255, 0), 2) + + cv2.putText(imageFrame, "Green Colour", (x, y), + cv2.FONT_HERSHEY_SIMPLEX, + 1.0, (0, 255, 0)) + + # Creating contour to track blue color + contours, hierarchy = cv2.findContours(blue_mask, + cv2.RETR_TREE, + cv2.CHAIN_APPROX_SIMPLE) + for pic, contour in enumerate(contours): + area = cv2.contourArea(contour) + if(area > 300): + x, y, w, h = cv2.boundingRect(contour) + imageFrame = cv2.rectangle(imageFrame, (x, y), + (x + w, y + h), + (255, 0, 0), 2) + + cv2.putText(imageFrame, "Blue Colour", (x, y), + cv2.FONT_HERSHEY_SIMPLEX, + 1.0, (255, 0, 0)) + + # Program Termination + cv2.imshow("Multiple Color Detection in Real-TIme", imageFrame) + if cv2.waitKey(10) & 0xFF == ord('q'): + cap.release() + cv2.destroyAllWindows() + break