Als ich versuchte, die Zeichen im Video zu binarisieren, wurden wahrscheinlich nur die Person und der Telop extrahiert, weil sich der Hintergrund nicht in der natürlichen Umgebung befand und nichts reflektiert wurde, aber wenn die Hintergrundfarbe gelb war Ich dachte, es würde wie ein IPPON Grand Prix aussehen, also habe ich es implementiert.
import cv2
import numpy as np
if __name__ == '__main__':
cap = cv2.VideoCapture('one_minutes.mp4')
cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = cap.get(cv2.CAP_PROP_FPS)
telop_height = 50
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
writer = cv2.VideoWriter('threshold_raw.mp4',fourcc, fps, (cap_width, cap_height + telop_height))
kernel = np.ones((3,3),np.uint8)
count = 0
try :
while True:
if not cap.isOpened():
break
if cv2.waitKey(1) & 0xFF == ord('q'):
break
ret, frame = cap.read()
if frame is None:
break
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
ret2, frame = cv2.threshold(frame, 0, 255, cv2.THRESH_OTSU)
#Schrumpfen->Erweiterung
frame = cv2.morphologyEx(frame, cv2.MORPH_OPEN, kernel)
background = np.zeros((cap_height, cap_width, 3), np.uint8)
background[:] = tuple((80,235,247))
telop = np.zeros((telop_height, cap_width, 3), np.uint8)
telop[:] = tuple((128,128,128))
#Einmal monochrom(dim=1)Aus Farbe(dim=3)Umstellung auf
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
#Hintergrundfarbe und Zusammensetzung
frame = cv2.bitwise_and(frame, background)
images = [frame, telop]
frame = np.concatenate(images, axis=0)
font = cv2.FONT_HERSHEY_SIMPLEX
cv2.putText(frame, "{:.4f} [sec]".format(round(count/fps, 4)),
(cap_width - 250, cap_height + telop_height - 10),
font,
1,
(0, 0, 255),
2,
cv2.LINE_AA)
writer.write(frame)
count += 1
except cv2.error as e:
print(e)
writer.release()
cap.release()
ret2, frame = cv2.threshold(frame, 0, 255, cv2.THRESH_OTSU)
Es ist binärisiert mit. Hier wird der Otsu-Algorithmus verwendet.
frame = cv2.morphologyEx(frame, cv2.MORPH_OPEN, kernel)
Wenn Sie nun das binärisierte Bild verkleinern-> vergrößern, werden die weißen Flecken im Stadium der Kontraktion schwarz ausgefüllt, um das Rauschen zu entfernen.
background = np.zeros((cap_height, cap_width, 3), np.uint8)
background[:] = tuple((80,235,247))
background[:] = tuple((80,235,247))
#Einmal monochrom(dim=1)Aus Farbe(dim=3)Umstellung auf
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
#Hintergrundfarbe und Zusammensetzung
frame = cv2.bitwise_and(frame, background)
Erstellt eine einzelne gelbe Hintergrundfarbe und kombiniert sie mit dem binärisierten Bild mit "bitwise_and".
Es mag etwas verwirrend sein, aber wenn Sie sich die Namen der Parteien oben ansehen, können Sie sehen, dass das Geräusch verschwindet, wenn die Kontraktion verringert wird.
Ich konnte die Objekte ziemlich sauber trennen, also werde ich das nächste Mal versuchen, die Zeichen zu extrahieren.
Recommended Posts