Verbesserung der Wert/-Farb-vergleiche
Verfasst: Montag 17. Juni 2019, 11:54
Huhu und zwar probiere ich derzeit aus ein besseres bzw. gleichmäßigeres Ergebnis bei der Analyse eines Videos anhand der "Farbvergleiche" zu erhalten. (Also es funktioniert ist allerdings bei unterschiedlichem Licht/Umgebungseinfluss relativ "ungenau")
Probiert habe ich bisher GRAY und HSV sowie unten zu sehen einfach den prozentualen Anteil im RGB zu nehmen.
Vlt hat ja jmd einen Vorschlag oder weiß wie man dieses Problem beheben bzw. die Werte "zuverlässiger" machen kann.
Bei meinem Beispielvideo macht z.B.: der prozentuale Rotwert einen ordentlichen Sprung wenn die Kameraperspektive verändert wird (die Werte sind allerdings von Video zu Video verschieden "stark" so das ich nicht fest sagen kann aber Wert xyz tue das)
Danke für eure Hilfe
MfG Felix
Probiert habe ich bisher GRAY und HSV sowie unten zu sehen einfach den prozentualen Anteil im RGB zu nehmen.
Vlt hat ja jmd einen Vorschlag oder weiß wie man dieses Problem beheben bzw. die Werte "zuverlässiger" machen kann.
Bei meinem Beispielvideo macht z.B.: der prozentuale Rotwert einen ordentlichen Sprung wenn die Kameraperspektive verändert wird (die Werte sind allerdings von Video zu Video verschieden "stark" so das ich nicht fest sagen kann aber Wert xyz tue das)
Code: Alles auswählen
def check_board_area(self, progress):
"""
a method that analyse the video frame per frame and save the Clips (Board) in a list
"""
video = cv2.VideoCapture(self.__file_path)
maxframes = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
try:
times = list()
for frame_number in count():
if frame_number % 30 == 0:
progress(frame_number/maxframes*100)
is_ok, frame = video.read()
if not is_ok:
if times:
self.board_subvideos.append((times[0], times[-1]))
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
average = cv2.mean(frame)
#summe = average[0] + average[1] + average[2]
#percentage_red = (100 * average[0]) / summe
#percentage_green = (100 * average[1]) / summe
#percentage_blue = (100 * average[2]) / summe
if average[0] > 158:
times.append(video.get(cv2.CAP_PROP_POS_MSEC) / 1000)
elif times:
self.board_subvideos.append((times[0], times[-1]))
times.clear()
finally:
video.release()
MfG Felix