import cv2 import time import sys # ========================= # Otwieranie kamery # ========================= cap = cv2.VideoCapture(0, cv2.CAP_AVFOUNDATION) # Na macOS warto wymusić AVFoundation # cap = cv2.VideoCapture(0, cv2.CAP_AVFOUNDATION) if not cap.isOpened(): print("Nie można otworzyć kamery") exit() ret, frame = cap.read() if not ret: print("nie ma obrazu") cap.release() cv2.destroyAllWindows() sys.exit(0) print(f"{cap.get(cv2.CAP_PROP_BRIGHTNESS)}") print(f"{cap.get(cv2.CAP_PROP_CONTRAST)}") print(f"{cap.get(cv2.CAP_PROP_SATURATION)}") print(f"{cap.get(cv2.CAP_PROP_HUE)}") print(f"{cap.get(cv2.CAP_PROP_GAIN)}") print(f"{cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)}") print(f"{cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)}") print(f"{cap.set(cv2.CAP_PROP_AUTO_EXPOSURE, 0.25)}") time.sleep(0.5) print(f"{cap.set(cv2.CAP_PROP_EXPOSURE, -1)}") # ========================= # Lista parametrów OpenCV # ========================= camera_props = { "BRIGHTNESS": cv2.CAP_PROP_BRIGHTNESS, "CONTRAST": cv2.CAP_PROP_CONTRAST, "SATURATION": cv2.CAP_PROP_SATURATION, "HUE": cv2.CAP_PROP_HUE, "GAIN": cv2.CAP_PROP_GAIN, "EXPOSURE": cv2.CAP_PROP_EXPOSURE, "SHARPNESS": getattr(cv2, "CAP_PROP_SHARPNESS", -1), "GAMMA": getattr(cv2, "CAP_PROP_GAMMA", -1), "AUTO_EXPOSURE": getattr(cv2, "CAP_PROP_AUTO_EXPOSURE", -1), "WB_TEMPERATURE": getattr(cv2, "CAP_PROP_WB_TEMPERATURE", -1), } # ========================= # Okno i suwaki # ========================= cv2.namedWindow("camera") def nothing(x): pass # Zakresy są orientacyjne cv2.createTrackbar("brightness", "camera", 128, 255, nothing) cv2.createTrackbar("contrast", "camera", 128, 255, nothing) cv2.createTrackbar("saturation", "camera", 128, 255, nothing) cv2.createTrackbar("hue", "camera", 128, 255, nothing) cv2.createTrackbar("gain", "camera", 0, 255, nothing) cv2.createTrackbar("exposure", "camera", 0, 255, nothing) # ========================= # Pętla główna # ========================= while True: try: # Odczyt suwaków brightness = cv2.getTrackbarPos("brightness", "camera") contrast = cv2.getTrackbarPos("contrast", "camera") saturation = cv2.getTrackbarPos("saturation", "camera") hue = cv2.getTrackbarPos("hue", "camera") gain = cv2.getTrackbarPos("gain", "camera") exposure = cv2.getTrackbarPos("exposure", "camera") # Ustawianie parametrów print(f"{cap.set(cv2.CAP_PROP_BRIGHTNESS, brightness / 255.0)}") print(f"{cap.set(cv2.CAP_PROP_CONTRAST, contrast / 255.0)}") print(f"{cap.set(cv2.CAP_PROP_SATURATION, saturation / 255.0)}") print(f"{cap.set(cv2.CAP_PROP_HUE, hue / 255.0)}") print(f"{cap.set(cv2.CAP_PROP_GAIN, gain / 255.0)}") # Exposure często wymaga innych wartości # cap.set(cv2.CAP_PROP_EXPOSURE, float(exposure)) # Odczyt klatki ret, frame = cap.read() if not ret: print("Błąd odczytu obrazu") break # Wyświetlanie aktualnych wartości REALNIE ustawionych y = 20 for name, prop in camera_props.items(): if prop == -1: continue value = cap.get(prop) text = f"{name}: {value:.3f}" cv2.putText( frame, text, (10, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1 ) y += 20 cv2.imshow("camera", frame) key = cv2.waitKey(1) # ESC kończy if key == 27: break except Exception: print(f"exp:") finally: cap.release() cv2.destroyAllWindows() # ========================= # Sprzątanie # ========================= cap.release() cv2.destroyAllWindows()