Files
duck-preview/test_opencv.py
2026-05-18 16:09:23 +02:00

140 lines
3.8 KiB
Python

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()