Python – Colour Detection using Pandas & OpenCV

 

Python – Colour Detection using Pandas & OpenCV



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.



Prerequisites

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


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 imag




The project folder contains 3 files: just place inside C:\Python3.9.1\Python\

as per your setup in your Desktop

  • Color_detection.py – main source code of our project.
  • Colorpic.jpg – sample image for experimenting. Take any image and save inside same folder as above and below 
  • Colors.csv – a file that contains our dataset.
After Running above shell in command prompt not in any IDE we will see image like

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.

FILES

  • Color_detection.py – main source code of our project. Save this file 
import cv2
import numpy as np
import pandas as pd
import argparse

# Creating argument parser to take image path from command line
ap = argparse.ArgumentParser()
ap.add_argument('-i', '--image', required=True, help="Image Path")
args = vars(ap.parse_args())
img_path = args['image']

# Reading the image with opencv
img = cv2.imread(img_path)

# declaring global variables (are used later on)
clicked = False
r = g = b = xpos = ypos = 0

# 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)


# function to calculate minimum distance from all colors and get the most matching color
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


# function to get x,y coordinates of mouse double click
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)


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

while (1):

cv2.imshow("image", img)
if (clicked):

# cv2.rectangle(image, startpoint, endpoint, color, thickness)-1 fills entire rectangle
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 )
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()

===================================================================================
  • Colors.csv – a file that contains our dataset. You can download from google by typing as colors.csv



USING IDE PYCHARMS LOOK OUT THE BELOW IMAGE:



# Reading the image with opencv
img = cv2.imread(r'C:\Users\RCF\PycharmProjects\detection\colorpic.jpg')


Comments

Popular posts from this blog

Python to automate What's App messages

Building RESTful APIs with Flask in PyCharm

Redirecting to another page with button click in Python-flask