Cet article présente principalement la fonction d'extraction d'objets vidéo ultra-simple implémentée en Python, qui a une certaine valeur de référence. Maintenant, je la partage avec tout le monde. Les amis dans le besoin peuvent s'y référer
L'extraction d'objets vidéo
n'est pas tant une extraction d'objets vidéo que une extraction de couleurs vidéo, car son essence utilise toujours la détection d'objets couleur HSV d'OpenCV. Pas grand chose à dire ci-dessous, jetons un œil à l’introduction détaillée.
Introduction au HSV
HSV signifie teinte (H : teinte), saturation (S : saturation), luminosité ( V : value), un espace colorimétrique créé par A. R. Smith en 1978, également appelé modèle Hexcone ;
Teinte (H : teinte) : mesurée en angle, avec une plage de valeurs de 0°~360°, à partir du rouge. et en comptant dans le sens inverse des aiguilles d'une montre, le rouge est 0°, le vert est 120° et le bleu est 240°. Leurs couleurs complémentaires sont : le jaune est de 60°, le cyan est de 180° et le magenta est de 300° (la plage de valeurs de H dans OpenCV est de 0 à 180, lorsqu'il est stocké sur 8 bits
Saturation (S) ; : saturation) : la plage de valeurs est de 0 à 255, plus la valeur est grande, plus la couleur est saturée ;
Luminosité (V : valeur) : la plage de valeurs est de 0 (noir) à 255 (blanc) ;
Affichage des effets
Idées de mise en œuvre
Comme le montre le rendu ci-dessus, il ne nous reste plus qu'à identifier le Peppa Pig vert dans la vidéo. Voici les étapes d'identification :
. - La valeur HSB de la couleur Peppa Pig obtenue en utilisant PS est équivalente au HSV d'OpenCV, mais la valeur HSV (HSB) de PS est : 0~360, 0~1, 0~1, tandis que la valeur HSV d'OpenCV est : 0 ~ 180, 0 ~ 255, 0 ~ 255, donc le hsv de ps doit être traité, H/2, SV*255 ;
- Utilisez le bit OpenCV "ET" " pour extraire une partie HSV Color de l'image ;
- Utiliser le flou gaussien pour optimiser l'image ;
- Affichage de l'image ;
PS Le HSB sur le côté droit de la barre d'outils affiche :
Code complet
#coding=utf-8
#HSV转换(颜色提取)
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
while (1):
_, frame = cap.read()
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
#在PS里用取色器的HSV
psHSV = [112, 89, 52]
diff = 40 #上下浮动值
#因为PS的HSV(HSB)取值是:0~360、0~1、0~1,而OpenCV的HSV是:0~180、0~255、0~255,所以要对ps的hsv进行处理,H/2、SV*255
lowerHSV = [(psHSV[0] - diff) / 2, (psHSV[1] - diff) * 255 / 100,
(psHSV[2] - diff) * 255 / 100]
upperHSV = [(psHSV[0] + diff) / 2, (psHSV[1] + diff) * 255 / 100,
(psHSV[2] + diff) * 255 / 100]
mask = cv2.inRange(hsv, np.array(lowerHSV), np.array(upperHSV))
#使用位“与运算”提取颜色部分
res = cv2.bitwise_and(frame, frame, mask=mask)
#使用高斯模式优化图片
res = cv2.GaussianBlur(res, (5, 5), 1)
cv2.imshow('frame', frame)
# cv2.imshow('mask', mask)
cv2.imshow('res', res)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
Copier après la connexion
Recommandations associées :
Utilisation de Python pour implémenter un exemple de code de fonction de téléchargement vidéo
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!