Lorsque j'ai essayé de binariser les personnages de la vidéo, seuls la personne et le telop ont été extraits probablement parce que l'arrière-plan n'était pas dans l'environnement naturel et que rien n'était reflété, mais si la couleur de fond était jaune Je pensais que cela ressemblerait à un Grand Prix IPPON, alors je l'ai implémenté.
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)
			#Rétrécir->expansion
			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))
			#Une fois monochrome(dim=1)De la couleur(dim=3)Conversion en
			frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
			#Couleur et composition d'arrière-plan
			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)
Il est binarisé avec. Ici, l'algorithme d'Otsu est utilisé.
frame = cv2.morphologyEx(frame, cv2.MORPH_OPEN, kernel)
Maintenant rétrécissez-> augmentez à partir de l'image binarisée et les taches blanches sont noircies au stade de la contraction pour éliminer le bruit.
background = np.zeros((cap_height, cap_width, 3), np.uint8)
			background[:] = tuple((80,235,247))
background[:] = tuple((80,235,247))
#Une fois monochrome(dim=1)De la couleur(dim=3)Conversion en
frame = cv2.cvtColor(frame, cv2.COLOR_GRAY2BGR)
#Couleur et composition d'arrière-plan
frame = cv2.bitwise_and(frame, background)
Crée une seule couleur d'arrière-plan jaune et la combine avec l'image binarisée avec bitwise_and.


Cela peut être un peu déroutant, mais si vous regardez les noms des groupes ci-dessus, vous pouvez voir que le bruit disparaît lorsque la contraction est réduite.
J'ai pu séparer les objets assez proprement, donc la prochaine fois j'essaierai d'extraire les personnages.