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