1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
print(cap.isOpened())
if not ret:
print("Impossible de capturer l'image")
break
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
lower_yellow = np.array([20, 100, 100]) # Min : Hue = 20, Saturation = 100, Value = 100
upper_yellow = np.array([30, 255, 255]) # Max : Hue = 30, Saturation = 255, Value = 255
mask = cv2.inRange(hsv, lower_yellow, upper_yellow)
result = cv2.bitwise_and(frame, frame, mask=mask)
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
if contours:
largest_contour = max(contours, key=cv2.contourArea)
M = cv2.moments(largest_contour)
if M["m00"] != 0:
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
cv2.circle(frame, (cX, cY), 10, (0, 255, 0), -1)
cv2.putText(frame, f"({cX}, {cY})", (cX + 10, cY - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
if cX < 200:
print("tourner à gauche")
elif cX > 400:
print("tourner à droite")
cv2.imshow("Frame", frame)
cv2.imshow("Mask", mask)
cv2.imshow("Result", result)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows() |