140 lines
3.8 KiB
Python
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() |