Uma das abilidades indispensável para um projetista de visão computacional é sobre o uso máscaras. A capa de invisibilidade é um excelente exercício para compreensão dessa técnica.
Para repetir esse experimento você vai precisar dos seguintes itens.
Python3
Opencv-python ou opencv-contrib-python
numpy
Video de fundo
Uma toalha ou lençou de cor vermelho (com edição pode ser outra cor)
Podemos dividir esse propblemas nos seguintes tópicos:
Obtenção do fundo
mascaras para cor vermelha
Operações lógicas
import cv2
import numpy as np
cap=cv2.VideoCapture("input.mp4")
cap_fundo=cv2.VideoCapture("fundo.mp4")
mean_fundo=[]
# calcula mediana de de 10 frame
for i inrange(10):
fundo=cap_fundo.read()[1]
mean_fundo.append(fundo)
fundo = np.median(np.array(mean_fundo),axis=0)
fundo=fundo.astype(np.uint8)
#gravar resultado
fourcc = cv2.VideoWriter_fourcc(*'mp4v')
h, w, _ =fundo.shape
out = cv2.VideoWriter('my_saida.mp4', fourcc, 30, (h, w))
Das linhas 8 à 14 pegamos os 10 primeiros frames do fundo e criamos um fundo usando a mediana. Isso pode ser útil caso tenha alguma variação luminosa durante a gravação do video.
for i inrange(10):
fundo=cap_fundo.read()[1]
mean_fundo.append(fundo)
fundo = np.median(np.array(mean_fundo),axis=0)
fundo=fundo.astype(np.uint8)
for i in range(10):
fundo=cap_fundo.read()[1]
mean_fundo.append(fundo)
fundo = np.median(np.array(mean_fundo),axis=0)
fundo=fundo.astype(np.uint8)
for i in range(10):
fundo=cap_fundo.read()[1]
mean_fundo.append(fundo)
fundo = np.median(np.array(mean_fundo),axis=0)
fundo=fundo.astype(np.uint8)
Das linhas 27 à 38 criamos as máscaras para detectar nossa capa
A segmentação realizada aqui segue os passos desse artigo link. Com excessão de que a cor vermelho esta entre 120 a 30 do canal H. Assim precisamos definir duas mascas porque o OpenCV mapear o canal H até 180.
Ou seja, uma mascara pega a região de 0 a 30 e a outra de 120 a 180.
A mask1 tem valor 1 para a capa e 0 para o restante. A operação cv2.bitwise_not inverte criando a mask2. Assim quando aplicamos na imagem original, apenas a capa é removida.
15 Replies to “Capa de invisibilidade usando OpenCV”
Good post. I will want some time to absorb your article.. Petronella Clevie Shabbir
Way cool! Some extremely valid points! I appreciate you writing this article plus the rest of the website is extremely good. Deni Phip Melville
Thank you very much
Wow, this article is nice, my younger sister is analyzing these things, therefore I am going to convey her. Fredra Herb Rolan
Thank you very much
Very good post! We will be linking to this great post on our website. Keep up the great writing. Carey Chaim Merola
Very informative post. Really looking forward to read more. Cool. Josey Nicol Neall
Appreciation to my father who shared with me about this webpage, this web site is truly awesome. Adriana Trumann Oribel
Utterly written written content , appreciate it for selective information . Ericha Booth Dahle
Thanks to my father who told me on the topic of this weblog, this weblog is really awesome. Katleen Kyle Papagena
Excellent, what a website it is! This weblog provides helpful information to us, keep it up. Clarette Stanley Singh
I think this is among the most vital info for me. And i am glad reading your article. Lizzy Hill Marisa
We are a group of volunteers and opening a new scheme in our community.
Your web site provided us with valuable info to work on. You have done a formidable job and our entire community will be grateful to you.
Wow, this paragraph is fastidious, my younger sister is analyzing these things, therefore
I am going to inform her.
Pretty! This was an extremely wonderful post. Many thanks for providing this info.