add presentation
This commit is contained in:
parent
ad2eea06e5
commit
f554f503c9
@ -1,165 +0,0 @@
|
|||||||
import cv2
|
|
||||||
import numpy as np
|
|
||||||
|
|
||||||
# from Track import nothing
|
|
||||||
# # Farbwerte für die Erkennung (Beispiel: Rot, Grün, Blau)
|
|
||||||
colors = [(0, 0, 255), (0, 255, 0), (255, 0, 0)]
|
|
||||||
color_names = ["Rot", "Gruen", "Blau"]
|
|
||||||
|
|
||||||
# video cap
|
|
||||||
|
|
||||||
|
|
||||||
# Farbgrenzen für die Erkennung
|
|
||||||
lower_red = np.array([80, 160, 150])
|
|
||||||
upper_red = np.array([255, 255, 255])
|
|
||||||
|
|
||||||
lower_green = np.array([40, 50, 160])
|
|
||||||
upper_green = np.array([80, 255, 255])
|
|
||||||
|
|
||||||
lower_blue = np.array([95, 180, 90])
|
|
||||||
upper_blue = np.array([130, 255, 255])
|
|
||||||
|
|
||||||
CURRENT_SCORES= {'score_red': 0,
|
|
||||||
'score_green': 0,
|
|
||||||
'score_blue': 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# Funktion zur Farberkennung
|
|
||||||
def erkennung_farben(img):
|
|
||||||
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
|
|
||||||
results = []
|
|
||||||
|
|
||||||
count_red = 0
|
|
||||||
count_green = 0
|
|
||||||
count_blue = 0
|
|
||||||
|
|
||||||
for i, color in enumerate(colors):
|
|
||||||
if i == 0:
|
|
||||||
lower = lower_red
|
|
||||||
upper = upper_red
|
|
||||||
elif i == 1:
|
|
||||||
lower = lower_green
|
|
||||||
upper = upper_green
|
|
||||||
elif i == 2:
|
|
||||||
lower = lower_blue
|
|
||||||
upper = upper_blue
|
|
||||||
|
|
||||||
mask = cv2.inRange(hsv_img, lower, upper)
|
|
||||||
|
|
||||||
# Farbfläche finden
|
|
||||||
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
|
|
||||||
center = None
|
|
||||||
count = 0
|
|
||||||
|
|
||||||
for contour in contours:
|
|
||||||
if count < 3:
|
|
||||||
if cv2.contourArea(contour) > 100:
|
|
||||||
# Schwerpunkt der Kontur berechnen
|
|
||||||
M = cv2.moments(contour)
|
|
||||||
if M["m00"] > 0:
|
|
||||||
cX = int(M["m10"] / M["m00"])
|
|
||||||
cY = int(M["m01"] / M["m00"])
|
|
||||||
center = (cX, cY)
|
|
||||||
count += 1
|
|
||||||
# Rechteck zeichnen
|
|
||||||
x, y, w, h = cv2.boundingRect(contour)
|
|
||||||
cv2.rectangle(img, (x, y), (x + w, y + h), color, 2)
|
|
||||||
cv2.putText(img, color_names[i], (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)
|
|
||||||
|
|
||||||
# Farbanzahl erhöhen
|
|
||||||
if i == 0:
|
|
||||||
count_red += 1
|
|
||||||
elif i == 1:
|
|
||||||
count_green += 1
|
|
||||||
elif i == 2:
|
|
||||||
count_blue += 1
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
results.append(center)
|
|
||||||
|
|
||||||
return img, results, count_red, count_green, count_blue
|
|
||||||
|
|
||||||
# Funktion zur Positionsermittlung
|
|
||||||
def ermittle_position(results, img_width):
|
|
||||||
positions = []
|
|
||||||
|
|
||||||
# pos_to_num = {"Rechts": 3,
|
|
||||||
# "Mitte": 2,
|
|
||||||
# "Links": 1,
|
|
||||||
# "Nicht gefunden": 0}
|
|
||||||
|
|
||||||
for result in results:
|
|
||||||
if result is None:
|
|
||||||
position = 0
|
|
||||||
else:
|
|
||||||
x = result[0]
|
|
||||||
if x < img_width / 3:
|
|
||||||
position = 3
|
|
||||||
elif x < 2 * img_width / 3:
|
|
||||||
position = 2
|
|
||||||
else:
|
|
||||||
position = 1
|
|
||||||
|
|
||||||
positions.append(position)
|
|
||||||
return positions
|
|
||||||
|
|
||||||
# def count_colors(my_game: Game, red: int, green: int, blue: int) -> None:
|
|
||||||
# currrent_scores = {'score_red': red,
|
|
||||||
# 'score_green': green,
|
|
||||||
# 'score_blue': blue
|
|
||||||
# }
|
|
||||||
# my_game.set_scoreboard(currrent_scores)
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
# Videoquelle öffnen (kann auch eine Bilddatei sein)
|
|
||||||
video = cv2.VideoCapture(0) # Hier "0" für die Kamera verwenden
|
|
||||||
|
|
||||||
while True:
|
|
||||||
|
|
||||||
ret, frame = video.read(0)
|
|
||||||
|
|
||||||
# Fehlerbehandlung, wenn kein Bild gelesen werden kann
|
|
||||||
if not ret:
|
|
||||||
break
|
|
||||||
# Farben erkennen
|
|
||||||
farben_img, ergebnisse, count_red, count_green, count_blue = erkennung_farben(frame)
|
|
||||||
|
|
||||||
# Add counted colours to the scoreboard in the correct field
|
|
||||||
|
|
||||||
# count_colors(count_red, count_green, count_blue)
|
|
||||||
|
|
||||||
|
|
||||||
# Anzahl der Farben anzeigen
|
|
||||||
# cv2.putText(farben_img, f"Rot: {count_red}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[0], 2)
|
|
||||||
# cv2.putText(farben_img, f"Gruen: {count_green}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[1], 2)
|
|
||||||
# cv2.putText(farben_img, f"Blau: {count_blue}", (10, 90), cv2.FONT_HERSHEY_SIMPLEX, 1, colors[2], 2)
|
|
||||||
|
|
||||||
# Positionen ermitteln
|
|
||||||
img_width = frame.shape[1]
|
|
||||||
positionen = ermittle_position(ergebnisse, img_width)
|
|
||||||
|
|
||||||
# Positionen anzeigen
|
|
||||||
for i, position in enumerate(positionen):
|
|
||||||
cv2.putText(farben_img, f"{color_names[i]}: {position}", (10, 150 + 30 * i),
|
|
||||||
cv2.FONT_HERSHEY_SIMPLEX, 1, colors[i], 2)
|
|
||||||
|
|
||||||
# Linien zeichnen
|
|
||||||
cv2.line(farben_img, (img_width // 3, 0), (img_width // 3, frame.shape[0]), (0, 0, 0), 2)
|
|
||||||
cv2.line(farben_img, (2 * img_width // 3, 0), (2 * img_width // 3, frame.shape[0]), (0, 0, 0), 2)
|
|
||||||
|
|
||||||
# Bild anzeigen
|
|
||||||
cv2.imshow("Farberkennung", farben_img)
|
|
||||||
|
|
||||||
# Auf "q" drücken, um die Schleife zu beenden
|
|
||||||
if cv2.waitKey(1) & 0xFF == ord('q'):
|
|
||||||
break
|
|
||||||
|
|
||||||
# Videoquelle und Fenster schließen
|
|
||||||
video.release()
|
|
||||||
cv2.destroyAllWindows()
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
Binary file not shown.
Before Width: | Height: | Size: 348 KiB After Width: | Height: | Size: 338 KiB |
BIN
src_folder/Presentation/Interaktion Praktikum Präsentation.pptx
Normal file
BIN
src_folder/Presentation/Interaktion Praktikum Präsentation.pptx
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user