Detectando objetos de cor semelhante em Python usando OpenCV
OpenCV é uma biblioteca de funções de programação voltada principalmente para a visão computacional em tempo real.
Neste artigo, vamos ver como obter os objetos da mesma cor em uma imagem. Podemos selecionar uma cor por barra deslizante que é criada pelo comando cv2 cv2.createTrackbar.
Bibliotecas necessárias:
OpenCV Numpy
Abordagem:
Em primeiro lugar , precisamos ler a imagem que está em nossa pasta local usando cv2.imread(). Para filtrar um específica cor precisamos imagem convertido ao em HSV formato que é matiz, saturação , e valor e mascarar a imagem usando cv2.inRange(), fornecendo limites inferior e superior de RGB valores que queríamos para filtrar o que nos dá um preto e imagem branca onde as imagens com a cor do nosso interesse são a branco e as restantes a preto. podemos obter de volta as imagens com a cor especificada que demos pela barra de controle executando a operação cv2 bitwise_and .
Código:
import
cv2
import
numpy as np
import
matplotlib.pyplot as plt
cap
=
cv2.VideoCapture(
0
)
def
nothing(x):
pass
cv2.namedWindow(
'Tracking'
)
cv2.createTrackbar(
"LH"
,
"Tracking"
,
0
,
255
, nothing)
cv2.createTrackbar(
"LS"
,
"Tracking"
,
0
,
255
, nothing)
cv2.createTrackbar(
"LV"
,
"Tracking"
,
0
,
255
, nothing)
cv2.createTrackbar(
"HH"
,
"Tracking"
,
0
,
255
, nothing)
cv2.createTrackbar(
"HS"
,
"Tracking"
,
0
,
255
, nothing)
cv2.createTrackbar(
"HV"
,
"Tracking"
,
0
,
255
, nothing)
while
True
:
_, frame
=
cap.read()
hsv
=
cv2.cvtColor(frame,
cv2.COLOR_BGR2HSV)
l_h
=
cv2.getTrackbarPos(
"LH"
,
"Tracking"
)
l_s
=
cv2.getTrackbarPos(
"LS"
,
"Tracking"
)
l_v
=
cv2.getTrackbarPos(
"LV"
,
"Tracking"
)
h_h
=
cv2.getTrackbarPos(
"HH"
,
"Tracking"
)
h_s
=
cv2.getTrackbarPos(
"HS"
,
"Tracking"
)
h_v
=
cv2.getTrackbarPos(
"HV"
,
"Tracking"
)
l_b
=
np.array([l_h, l_s,
l_v])
u_b
=
np.array([h_h, h_s,
h_v])
mask
=
cv2.inRange(hsv, l_b,
u_b)
res
=
cv2.bitwise_and(frame,
frame, mask
=
mask)
cv2.imshow(
'frame'
, frame)
cv2.imshow(
'mask'
, mask)
cv2.imshow(
'res'
, res)
k
=
cv2.waitKey(
1
)
if
k
=
=
27
:
break
cap.release()
cv2.destroyAllWindows()
Resultado:
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva