Created
March 8, 2021 18:30
-
-
Save yokeshrana/788631a2bd94863798aad5ccf71c6010 to your computer and use it in GitHub Desktop.
Detecting Colors in Open CV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
import numpy as np | |
''' | |
Here we will try to detect colors in the image | |
''' | |
def empty(a): | |
pass | |
# Function used to stack the images | |
def stackImages(scale, imgArray): | |
rows = len(imgArray) | |
cols = len(imgArray[0]) | |
rowsAvailable = isinstance(imgArray[0], list) | |
width = imgArray[0][0].shape[1] | |
height = imgArray[0][0].shape[0] | |
if rowsAvailable: | |
for x in range(0, rows): | |
for y in range(0, cols): | |
if imgArray[x][y].shape[:2] == imgArray[0][0].shape[:2]: | |
imgArray[x][y] = cv2.resize(imgArray[x][y], (0, 0), None, scale, scale) | |
else: | |
imgArray[x][y] = cv2.resize(imgArray[x][y], (imgArray[0][0].shape[1], imgArray[0][0].shape[0]), | |
None, scale, scale) | |
if len(imgArray[x][y].shape) == 2: imgArray[x][y] = cv2.cvtColor(imgArray[x][y], cv2.COLOR_GRAY2BGR) | |
imageBlank = np.zeros((height, width, 3), np.uint8) | |
hor = [imageBlank] * rows | |
hor_con = [imageBlank] * rows | |
for x in range(0, rows): | |
hor[x] = np.hstack(imgArray[x]) | |
ver = np.vstack(hor) | |
else: | |
for x in range(0, rows): | |
if imgArray[x].shape[:2] == imgArray[0].shape[:2]: | |
imgArray[x] = cv2.resize(imgArray[x], (0, 0), None, scale, scale) | |
else: | |
imgArray[x] = cv2.resize(imgArray[x], (imgArray[0].shape[1], imgArray[0].shape[0]), None, scale, | |
scale) | |
if len(imgArray[x].shape) == 2: imgArray[x] = cv2.cvtColor(imgArray[x], cv2.COLOR_GRAY2BGR) | |
hor = np.hstack(imgArray) | |
ver = hor | |
return ver | |
path = 'Resources/lambo.png' | |
cv2.namedWindow("TrackBars") | |
cv2.resizeWindow("TrackBars", 640, 240) | |
cv2.createTrackbar("Hue Min", "TrackBars", 0, 179, empty) | |
cv2.createTrackbar("Hue Max", "TrackBars", 19, 179, empty) | |
cv2.createTrackbar("Sat Min", "TrackBars", 110, 255, empty) | |
cv2.createTrackbar("Sat Max", "TrackBars", 240, 255, empty) | |
cv2.createTrackbar("Val Min", "TrackBars", 153, 255, empty) | |
cv2.createTrackbar("Val Max", "TrackBars", 255, 255, empty) | |
while True: | |
img = cv2.imread(path) | |
#cv2.imshow("Original", img) | |
imgHSV = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) | |
#cv2.imshow("HSV",imgHSV) | |
h_min = cv2.getTrackbarPos("Hue Min", "TrackBars") | |
h_max = cv2.getTrackbarPos("Hue Max", "TrackBars") | |
s_min = cv2.getTrackbarPos("Sat Min", "TrackBars") | |
s_max = cv2.getTrackbarPos("Sat Max", "TrackBars") | |
v_min = cv2.getTrackbarPos("Val Min", "TrackBars") | |
v_max = cv2.getTrackbarPos("Val Max", "TrackBars") | |
print(h_min, h_max, s_min, s_max, v_min, v_max) | |
lower = np.array([h_min, s_min, v_min]) | |
upper = np.array([h_max, s_max, v_max]) | |
mask = cv2.inRange(imgHSV, lower, upper) | |
#cv2.imshow("Mask",mask) | |
imgResult = cv2.bitwise_and(img, img, mask=mask) | |
#cv2.imshow("Image Result",imgResult) | |
# Instead of displaying all image seprate we can stack them up in single window | |
imgStack = stackImages(0.6,([img,imgHSV],[mask,imgResult])) | |
cv2.imshow("Result", imgStack) | |
cv2.waitKey(200) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment