Color detection & tracking

inRange

$ cv2.inRange(image, lower, upper)

Parameter:

  • image => āļ āļēāļžāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ™āļģāļĄāļēāđƒāļŠāđ‰

  • lower => āļ„āđˆāļēāļŠāļĩāļ•āđˆāļģāļŠāļļāļ”āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ€āļ‚āļĩāļĒāļ™āđƒāļ™āļĨāļąāļāļĐāļ“āļ° tuple BGR

  • upper => āļ„āđˆāļēāļŠāļĩāļŠāļđāļ‡āļŠāļļāļ”āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢ āđ‚āļ”āļĒāđ€āļ‚āļĩāļĒāļ™āđƒāļ™āļĨāļąāļāļĐāļ“āļ° tuple BGR

Example:

import numpy as np
import cv2

image = cv2.imread("path/your/image.jpg")

colors = [
	([17, 15, 100], [50, 56, 200]),
	([86, 31, 4], [220, 88, 50]),
	([25, 146, 190], [62, 174, 250]),
	([103, 86, 65], [145, 133, 128])
]


for (lower, upper) in colors:

	lower = np.array(lower, dtype = "uint8")
	upper = np.array(upper, dtype = "uint8")

	mask = cv2.inRange(image, lower, upper)
	output = cv2.bitwise_and(image, image, mask = mask)
	
	cv2.imshow("images", np.hstack([image, output]))
	cv2.waitKey(0)

tracking

tracking āļˆāļ°āđ€āļ›āđ‡āļ™āđ€āļ—āļ„āļ™āļīāļ„āļ—āļĩāđˆāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļ­āļĒāļđāđˆāļšāļ™āļ āļēāļžāļ§āļīāļ”āļĩāđ‚āļ­āļŦāļĢāļ·āļ­āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļžāđāļšāļš Real-time āđ‚āļ”āļĒāđƒāļ™āļŦāļąāļ§āļ‚āđ‰āļ­āļ™āļĩāđ‰āļˆāļ°āđ€āļ›āđ‡āļ™āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ§āļąāļ•āļ–āļļāļ—āļĩāđˆāļĄāļĩāļŠāļĩāļ•āļēāļĄāļ—āļĩāđˆāļœāļđāđ‰āđƒāļŠāđ‰āļāļģāļŦāļ™āļ”

  • āļĢāļąāļšāļ āļēāļžāļ—āļĩāđˆāđ€āļ›āđ‡āļ™āļ§āļīāļ”āļĩāđ‚āļ­āļŦāļĢāļ·āļ­āļ āļēāļžāļˆāļēāļāļāļĨāđ‰āļ­āļ‡ webcam

  • āļāļģāļŦāļ™āļ”āļ„āđˆāļēāļŠāļĩāļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™

  • color detection

  • contour

Example:

import imutils
import cv2

camera = cv2.VideoCapture(0)

colorRanges = [
	((29, 86, 6), (64, 255, 255), "green"),
	((57, 68, 0), (151, 255, 255), "blue")]

while True:

	(grabbed, frame) = camera.read()

	frame = imutils.resize(frame, width=600)
	blurred = cv2.GaussianBlur(frame, (11, 11), 0)
	
	hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)

	for (lower, upper, colorName) in colorRanges:

		mask = cv2.inRange(hsv, lower, upper)
		mask = cv2.erode(mask, None, iterations=2)
		mask = cv2.dilate(mask, None, iterations=2)

		cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
			cv2.CHAIN_APPROX_SIMPLE)
		cnts = imutils.grab_contours(cnts)

		if len(cnts) > 0:

			c = max(cnts, key=cv2.contourArea)
			((x, y), radius) = cv2.minEnclosingCircle(c)
			M = cv2.moments(c)
			(cX, cY) = (int(M["m10"] / M["m00"]), int(M["m01"] / M["m00"]))

			if radius > 10:
				cv2.circle(frame, (int(x), int(y)), int(radius), (0, 255, 255), 2)
				cv2.putText(frame, colorName, (cX, cY), cv2.FONT_HERSHEY_SIMPLEX,
					1.0, (0, 255, 255), 2)


	cv2.imshow("Frame", frame)
	key = cv2.waitKey(1) & 0xFF

	if key == ord("q"):
		break

camera.release()
cv2.destroyAllWindows()

Last updated

Was this helpful?