In this tutorial I will be showing how you can detect and track a particular colour using Python & OpenCV.
NOTE :- For this you will need basic knowledge of python.
So lets get started.
Step 1: INSTALLING PYTHON :-First step is to install python in your computer. To download Python 2.7 visit www.python.org and select your operating system (Windows/Linux/Mac). In this tutorial I have used Windows. If you use Linux/Mac OS X, your device already has Python 2.7 installed.
For window users, Once you have downloaded python, Install it. Installation is pretty simple just follow the GUI. Keep the location default and you should have python installed in your C: drive. Make sure you download Python 2.7 32bit even if you have a 64 bit OS, Because I found it difficult to install some modules in 64bit version.
Once Installation is completed you can head to windows search and enter "IDLE" a python IDE will show up where you can type in simple programs to test if everything works.
Just Enter 2+2 and it should give sum of the numbers. If error occurs you might need to reinstall python again.
If everything works fine you can move on to next step. Installing required Modules.
Step 2: INSTALLING MODULES :-You need to install 2 modules for this project.
Both can be installed using pip through windows CMD (Command Prompt).
First Open CMD and type ' pip ' and hit enter. If some error occurs you need to install pip. Now I will not go into that as there are many good tutorials out there. You can check out this.
Once pip is working use the command bellow to install OpenCV.
>> pip install opencv-python
To install Numpy :-
>> pip install numpy
This will install the modules and you can move to next step to start coding.
NOTE :- You require active internet connection to use pip.
Step 3: CODING :-Now when every thing is setup and ready to use we can start programming.
Note that you need a webcam for this project. If you don't have one you can use your Android smartphone as webcam using DroidCam app.
To write the code you can use any text editor or python IDE.
Check the following step by step explanation :
#importing Modules
import cv2
import numpy as np
So here we import the required modules. 'cv2' imports opencv and numpy is imported as np.
#Capturing Video through webcam.
cap = cv2.VideoCapture(0)
while True:_, img = cap.read()
Here we use cv2's videocapture method to start the webcam and record. It is stored in variable 'cap'. Here the argument '0' defines default webcam. if your device has a secondary camera you can use it by replacing '0' with '1'. the next while loop checks if Image is being received. When it is True video is streaming and read() function is used to read the video frames and store in variable 'img'.
#converting frame(img) from BGR (Blue-Green-Red) to HSV (hue-saturation-value)
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
We convert the frame from BGR to HSV. Know more about HSV here
#defining the range of Yellow color
yellow_lower = np.array([22,60,200],np.uint8)
yellow_upper = np.array([60,255,255],np.uint8)
Here we will be tracking Yellow colour. So we define range of yellow color.
#finding the range yellow colour in the image
yellow = cv2.inRange(hsv, yellow_lower, yellow_upper)
Here we find the range of yellow colour in the frame.
#Morphological transformation, Dilation
kernal = np.ones((5 ,5), "uint8")
blue=cv2.dilate(yellow, kernal)
res=cv2.bitwise_and(img, img, mask = yellow)
Here we compare the amount of yellow to blue as a reference.
#Tracking Colour (Yellow)
(_,contours,hierarchy)=cv2.findContours(yellow,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)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),3)
This code tracks the colour yellow and draws a rectangle around it.
#Display results
img = cv2.flip(img,1)
cv2.imshow("Yellow",res)
cv2.flip() method flips the image or mirrors it. if you want you can remove this line to see a regular output.
cv2.imshow(res) displays the video stream in a window with only the yellow colour it eliminates every other colour.
cv2.imshow("Color Tracking",img)
if cv2.waitKey(10) & 0xFF == 27:
cap.release()
cv2.destroyAllWindows()
break
cv2.imshow(img) show the normal video with yellow colour being tracked.
Just execute the code, Make sure your webcam is connected.
If you have any questions, Comment bellow...
You can download the whole code from below:-
Comments