Project in Python – Colour Detection using Pandas & OpenCV

Free Machine Learning courses with 130+ real-time projects Start Now!!

Python Project on Color Detection

Today’s project will be exciting and fun to build. We will be working with colors and you will get to learn about many concepts throughout this project. Colour detection is necessary to recognize objects, it is also used as a tool in various image editing and drawing apps.

This is the 10th project in the DataFlair’s series of 20 Python projects. I suggest you to bookmark the previous projects:

  1. Fake News Detection Python Project
  2. Parkinson’s Disease Detection Python Project
  3. Color Detection Python Project
  4. Speech Emotion Recognition Python Project
  5. Breast Cancer Classification Python Project
  6. Age and Gender Detection Python Project
  7. Handwritten Digit Recognition Python Project
  8. Chatbot Python Project
  9. Driver Drowsiness Detection Python Project
  10. Traffic Signs Recognition Python Project
  11. Image Caption Generator Python Project

What is Colour Detection?

Colour detection is the process of detecting the name of any color. Simple isn’t it? Well, for humans this is an extremely easy task but for computers, it is not straightforward. Human eyes and brains work together to translate light into color. Light receptors that are present in our eyes transmit the signal to the brain. Our brain then recognizes the color. Since childhood, we have mapped certain lights with their color names. We will be using the somewhat same strategy to detect color names.

color detection project in python

About the Python Project

In this color detection Python project, we are going to build an application through which you can automatically get the name of the color by clicking on them. So for this, we will have a data file that contains the color name and its values. Then we will calculate the distance from each color and find the shortest one.

The Dataset

Colors are made up of 3 primary colors; red, green, and blue. In computers, we define each color value within a range of 0 to 255. So in how many ways we can define a color? The answer is 256*256*256 = 16,581,375. There are approximately 16.5 million different ways to represent a color. In our dataset, we need to map each color’s values with their corresponding names. But don’t worry, we don’t need to map all the values. We will be using a dataset that contains RGB values with their corresponding names. The CSV file for our dataset has been taken from this link:

Colors Dataset

The colors.csv file includes 865 color names along with their RGB and hex values.

Prerequisites

Technology is evolving rapidly!
Stay updated with DataFlair on WhatsApp!!

Before starting with this Python project with source code, you should be familiar with the computer vision library of Python that is OpenCV and Pandas.

OpenCV, Pandas, and numpy are the Python packages that are necessary for this project in Python. To install them, simply run this pip command in your terminal:

pip install opencv-python numpy pandas

Steps for Building a Project in Python – Color Detection

Here are the steps to build an application in Python that can detect colors:

1. Download and unzip the zip file

Color Detection Zip File

The project folder contains 3 files:

  • Color_detection.py – main source code of our project.
  • Colorpic.jpg – sample image for experimenting.
  • Colors.csv – a file that contains our dataset.

2. Taking an image from the user

We are using argparse library to create an argument parser. We can directly give an image path from the command prompt:

import argparse

ap = argparse.ArgumentParser()
ap.add_argument('-i', '--image', required=True, help="Image Path")
args = vars(ap.parse_args())
img_path = args['image']
#Reading image with opencv
img = cv2.imread(img_path)

3. Next, we read the CSV file with pandas

The pandas library is very useful when we need to perform various operations on data files like CSV. pd.read_csv() reads the CSV file and loads it into the pandas DataFrame. We have assigned each column with a name for easy accessing.

#Reading csv file with pandas and giving names to each column
index=["color","color_name","hex","R","G","B"]
csv = pd.read_csv('colors.csv', names=index, header=None)

4. Set a mouse callback event on a window

First, we created a window in which the input image will display. Then, we set a callback function which will be called when a mouse event happens.

cv2.namedWindow('image')
cv2.setMouseCallback('image',draw_function)

With these lines, we named our window as ‘image’ and set a callback function which will call the draw_function() whenever a mouse event occurs.

Want to revise the Python concepts?

Check out 270+ Python Tutorials & brush up your basics

5. Create the draw_function

It will calculate the rgb values of the pixel which we double click. The function parameters have the event name, (x,y) coordinates of the mouse position, etc. In the function, we check if the event is double-clicked then we calculate and set the r,g,b values along with x,y positions of the mouse.

def draw_function(event, x,y,flags,param):
    if event == cv2.EVENT_LBUTTONDBLCLK:
        global b,g,r,xpos,ypos, clicked
        clicked = True
        xpos = x
        ypos = y
        b,g,r = img[y,x]
        b = int(b)
        g = int(g)
        r = int(r)

6. Calculate distance to get color name

We have the r,g and b values. Now, we need another function which will return us the color name from RGB values. To get the color name, we calculate a distance(d) which tells us how close we are to color and choose the one having minimum distance.

Our distance is calculated by this formula:

d = abs(Red – ithRedColor) + (Green – ithGreenColor) + (Blue – ithBlueColor)

def getColorName(R,G,B):
    minimum = 10000
    for i in range(len(csv)):
        d = abs(R- int(csv.loc[i,"R"])) + abs(G- int(csv.loc[i,"G"]))+ abs(B- int(csv.loc[i,"B"]))
        if(d<=minimum):
            minimum = d
            cname = csv.loc[i,"color_name"]
    return cname

7. Display image on the window

Whenever a double click event occurs, it will update the color name and RGB values on the window.

Using the cv2.imshow() function, we draw the image on the window. When the user double clicks the window, we draw a rectangle and get the color name to draw text on the window using cv2.rectangle and cv2.putText() functions.

while(1):
    cv2.imshow("image",img)
    if (clicked):
        #cv2.rectangle(image, startpoint, endpoint, color, thickness) -1 thickness fills rectangle entirely
        cv2.rectangle(img,(20,20), (750,60), (b,g,r), -1)

        #Creating text string to display ( Color name and RGB values )
        text = getColorName(r,g,b) + ' R='+ str(r) + ' G='+ str(g) + ' B='+ str(b)

        #cv2.putText(img,text,start,font(0-7), fontScale, color, thickness, lineType, (optional bottomLeft bool) )
        cv2.putText(img, text,(50,50),2,0.8,(255,255,255),2,cv2.LINE_AA)
  #For very light colours we will display text in black colour
        if(r+g+b>=600):
            cv2.putText(img, text,(50,50),2,0.8,(0,0,0),2,cv2.LINE_AA)

        clicked=False

    #Break the loop when user hits 'esc' key 
    if cv2.waitKey(20) & 0xFF ==27:
        break

cv2.destroyAllWindows()

8. Run Python File

The beginner Python project is now complete, you can run the Python file from the command prompt. Make sure to give an image path using ‘-i’ argument. If the image is in another directory, then you need to give full path of the image:

python color_detection.py -i <add your image path here>

running python mini project

Screenshots:

import cv2 - python mini project

def getColorName - project in python

while (1) python data science project

Output:

Double click on the window to know the name of the pixel color

red color detection - python mini project

yellow color detection - python project with source code

blue color detection - python mini project

Summary

In this Python project with source code, we learned about colors and how we can extract color RGB values and the color name of a pixel. We learned how to handle events like double-clicking on the window and saw how to read CSV files with pandas and perform operations on data. This is used in numerous image editing and drawing apps.

Want to prepare for your Python interview?

Practice 150+ Python Interview Questions & get hired as Python expert

Hope you enjoyed building this project and keep visiting for more cool projects.

If you are Happy with DataFlair, do not forget to make us happy with your positive feedback on Google

follow dataflair on YouTube

137 Responses

  1. ARAVIND SANKAR says:

    Traceback (most recent call last):
    File “C:\Users\Charles Aravind\Desktop\python-project-color-detection\color_detection.py”, line 1, in
    import cv2
    ModuleNotFoundError: No module named ‘cv2’

    • Ayush Verma says:

      First open CMD and type the command
      pip install opencv-python

      Then run the program

    • DataFlair says:

      Before importing the module, we have to install it. We can install OpenCv using pip by writing the statement ‘pip install opencv-python’ or ‘pip install opencv-contrib-python –user’. Hope I could solve your query.

  2. isha says:

    Can you tell what kind of algorithms is used?
    What is the role of Pandas and Open CV can you please explain?

    • Ayush Verma says:

      pandas is converting the data of the Colors.csv file into a list

    • DataFlair says:

      Hi isha,
      In this article, we are using an algorithm that identifies the color of the pixel of the image at which the mouse is clicked. Here, we are using the CSV file that helps us in identifying the color based on the R, G, B values. Accessing ok this file and its values, we use pandas. Using OpenCv we show the image in the window, to identify the button click and to get the RGB values at the particular pixel. Using the obtained values of RGB, we search for a particular color from the dataset. Hope I could solve your doubts.

  3. Santosini says:

    How can we found its report nd presentation

  4. niel bautisat says:

    usage: ipykernel_launcher.py [-h] -i IMAGE
    ipykernel_launcher.py: error: the following arguments are required: -i/–image
    An exception has occurred, use %tb to see the full traceback.

    SystemExit: 2

    wht is this??

  5. Kabeer says:

    Hey how can you change the imagine like you gave a sample one in the source but if we wanna put another
    how do you do that?

    • DataFlair says:

      We can save the image at some location in the device. Then read the particular image by giving its location while reading the image using the command cv2.imread(). Hope I could answer your question.

  6. Binod says:

    While running use “-i filename.jpg”

  7. Aayush Wadhwa says:

    i am trying to run the file in vs code.It shows no problems and also does not do anything the terminal is empty

    • Anubhav Singh says:

      Then try to run in windows powershell
      follow this step-
      –Open Windows Powershell in the directory where your file is saved
      –run this command ” Python color_detection.py -i image_name”

    • DataFlair says:

      You can use “pip show opencv-python” command in the VSCode terminal to check where the module “cv” is installed. Then you can change the path to the location where the module “cv” is installed. This can be done by clicking on the Python environment in the lower-left corner of VSCode. I hope this solves your problem.

      • Nana says:

        Hi! Does this code work in Mac M1? Because I ran the code but the color names and RGB values don’t appear on image.

  8. Aayush Wadhwa says:

    p.py: error: the following arguments are required: -i/–image

  9. obi says:

    yeah, me too.

  10. Anubhav Singh says:

    Then try to run in windows powershell
    follow this step-
    –Open Windows Powershell in the directory where your file is saved
    –run this command ” Python color_detection.py -i image_name”

  11. Reka says:

    How to predict a yellow color rose with others?? Any code plesse?

  12. Priyanshu says:

    File “C:\Users\ma\Downloads\color\color_detection.py”, line 3, in
    import pandas as pd
    ModuleNotFoundError: No module named ‘pandas’

    • DataFlair says:

      You have to first import the pandas module before importing it. You can do it by using the command “pip install pandas” or “conda install pandas”. Hope I could make it clear.

  13. Shrey Srivastava says:

    Hello,
    Hope you are doing great !

    I’ve installed opencv but now i’m getting this error: – ImportError: DLL load failed while importing cv2: The specified module could not be found.

    Please help ?

    Best Regards,
    Shrey

    • ROSHINI says:

      C:\Users\Administrator\Desktop>color.py -i colorpic.jpg
      File “C:\Users\Administrator\Desktop\color.py”, line 8
      ap.add_argument(‘-i’, ‘colorpic.jpg’, required=True, help=”Image Path”)
      ^
      SyntaxError: invalid character in identifier

  14. ROSHINI says:

    C:\Users\Administrator\Desktop>color.py -i colorpic.jpg
    Traceback (most recent call last):
    File “C:\Users\Administrator\Desktop\color.py”, line 21, in
    csv = pd.read_csv(‘colors.csv’, names=index, header=None)
    File “C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py”, line 678, in parser_f
    return _read(filepath_or_buffer, kwds)
    File “C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py”, line 440, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
    File “C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py”, line 787, in __init__
    self._make_engine(self.engine)
    File “C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py”, line 1014, in _make_engine
    self._engine = CParserWrapper(self.f, **self.options)
    File “C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py”, line 1708, in __init__
    self._reader = parsers.TextReader(src, **kwds)
    File “pandas\_libs\parsers.pyx”, line 384, in pandas._libs.parsers.TextReader.__cinit__
    File “pandas\_libs\parsers.pyx”, line 695, in pandas._libs.parsers.TextReader._setup_parser_source
    FileNotFoundError: File b’colors.csv’ does not exist

  15. Sahil Asopa says:

    the programm isnt working in jupyter notebook as well as in python, i dont understand the role of command prompt in this. you must clariffy how to run programm in detail

  16. prajwal says:

    how can i run this code in pycharm

  17. zubair says:

    usage: color_detection.py [-h] -i IMAGE
    color_detection.py: error: the following arguments are required: -i/–image

  18. Saad says:

    usage: look.py [-h] –image IMAGE
    look.py: error: the following arguments are required: –image/-i

  19. esther says:

    hi there, i’m trying to run the file in the terminal in vs code and it’s giving me a syntax error. i’ve checked and set the working directory to the same folder, copied and pasted it even, but it still doesn’t give. is there anything else that could be causing the issue? any help will be appreciated!

  20. Nivetha says:

    Can we do this for a bunch of images in a directory, one after the other? Instead of specifying the image name, can we specify the directory name and work through all the images in the directory?

  21. Dobby says:

    Is this code supported by Mac M1?

  22. Nana says:

    Will this code work in Mac M1?

  23. Nana says:

    Will this code work in Mac M1? Because the code runs but I can’t see the color names when I click on the image.

  24. ashish says:

    What is accuracy in percentage?

  25. mikiyas habte says:

    how can i solve this problem pip’ is not recognized as an internal or external command,
    operable program or batch file.

  26. Piyush Singla says:

    I am facing the following error. If anybody could help me I’ll be really grateful :

    usage: ipykernel_launcher.py [-h] -i IMAGE
    ipykernel_launcher.py: error: the following arguments are required: -i/–image
    An exception has occurred, use %tb to see the full traceback.

    SystemExit: 2

  27. Piyush says:

    Hello, could anyone please help me with the following error? I will be really grateful for the help

    usage: ipykernel_launcher.py [-h] -i IMAGE
    ipykernel_launcher.py: error: the following arguments are required: -i/–image
    An exception has occurred, use %tb to see the full traceback.

    SystemExit: 2

  28. Tomas says:

    Hi,

    Could someone explain why I’m getting “NameError: name ‘clicked’ is not defined”

    Thanks!

  29. Venakatesh says:

    after installation of opencv-python module also, getting error No module name cv2

  30. sahana .k says:

    usage: color_detection.py [-h] -i I
    color_detection.py: error: the following arguments are required: -i/-i-image
    how to solve this above error

Leave a Reply

Your email address will not be published. Required fields are marked *