test pyuvc
This commit is contained in:
140
test_opencv.py
Normal file
140
test_opencv.py
Normal 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()
|
||||
Reference in New Issue
Block a user