test pyuvc

This commit is contained in:
2026-05-18 16:09:23 +02:00
parent ae0b7784ac
commit 60eb59fc32
4 changed files with 530 additions and 0 deletions

140
test_opencv.py Normal file
View File

@@ -0,0 +1,140 @@
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()