Files
cours-ai-tutorials/Divers/tutoriel36/selectionne_couleur.py
2026-03-31 13:28:59 +02:00

66 lines
2.1 KiB
Python

import cv2
import numpy as np
def souris(event, x, y, flags, param):
global lo, hi, color
if event==cv2.EVENT_LBUTTONDBLCLK:
color=image[y, x][0]
if event==cv2.EVENT_MOUSEWHEEL:
if flags<0:
if color>5:
color-=1
else:
if color<250:
color+=1
lo[0]=color-15
hi[0]=color+15
color=90
S=50
V=50
lo=np.array([color-5, S, V])
hi=np.array([color+5, 255,255])
color_info=(0, 255, 0)
cap=cv2.VideoCapture(0)
cv2.namedWindow('Camera')
cv2.setMouseCallback('Camera', souris)
while True:
ret, frame=cap.read()
image=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
image=cv2.blur(image, (5, 5))
mask=cv2.inRange(image, lo, hi)
mask=cv2.erode(mask, None, iterations=2)
mask=cv2.dilate(mask, None, iterations=8)
elements=cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[-2]
if len(elements) > 0:
c=max(elements, key=cv2.contourArea)
((x, y), radius)=cv2.minEnclosingCircle(c)
if radius>10:
cv2.circle(frame, (int(x), int(y)), 5, color_info, 10)
cv2.line(frame, (int(x), int(y)), (int(x)+150, int(y)), color_info, 2)
cv2.putText(frame, "Objet !!!", (int(x)+10, int(y) -10), cv2.FONT_HERSHEY_DUPLEX, 1, color_info, 1, cv2.LINE_AA)
cv2.rectangle(frame, (0, 0), (frame.shape[1], 30), (100, 100, 100), cv2.FILLED)
cv2.putText(frame, "[Souris]Couleur: {:d} [o|l] S:{:d} [p|m] V{:d}".format(color, S, V), (5, 20), cv2.FONT_HERSHEY_PLAIN, 1, (255, 255, 255), 1, cv2.LINE_AA)
cv2.imshow('Camera', frame)
cv2.imshow('Mask', mask)
key=cv2.waitKey(1)&0xFF
if key==ord('q'):
break
if key==ord('p'):
V=min(255, V+1)
lo=np.array([color-5, S, V])
if key==ord('m'):
V=max(1, V-1)
lo=np.array([color-5, S, V])
if key==ord('o'):
S=min(255, S+1)
lo=np.array([color-5, S, V])
if key==ord('l'):
S=max(1, S-1)
lo=np.array([color-5, S, V])
cap.release()
cv2.destroyAllWindows()