Desenhar com o mouse em imagens usando Python-OpenCV
OpenCV é uma enorme biblioteca de código aberto para visão computacional, machine learning e processamento de imagens. OpenCV suporta uma grande variedade de linguagens de programação como Python, C ++, Java, etc. Ele pode processar imagens e vídeos para identificar objetos, rostos ou até mesmo a escrita de um humano. Neste artigo, tentaremos desenhar imagens com a ajuda do mouse. Antes de aprender a desenhar em imagens usando um mouse, precisamos entender o que é um retorno de chamada. <
Ligue de volta
Um retorno de chamada em programação significa chamar esta função (o retorno de chamada) quando um processo é concluído. O mesmo se aplica à programação orientada a eventos em geral. Quando um botão do mouse é clicado (um evento), chame uma função. Não sabemos quando o botão será clicado. Tudo o que podemos fazer é dizer ao botão “me ligue de volta” ou chamar esta função quando o botão do mouse for clicado.
Retornos de chamada do mouse
Um retorno de chamada pode ocorrer quando um usuário executa uma operação usando o mouse; esta operação é geralmente conhecida como um evento. Apenas um retorno de chamada está presente para um mouse, que é setMouseCallback() , todas as operações do mouse chamarão apenas esta função.
Podemos ter blocos condicionais para executar algo com base no evento / operação realizada com o mouse. Os eventos / operações do mouse podem ser:
- EVENT_MOUSEMOVE
- EVENT_LBUTTONDOWN
- EVENT_RBUTTONDOWN
- EVENT_LBUTTONUP
- EVENT_RBUTTONUP
Quando deve ocorrer esse retorno de chamada:
Queremos ter essa chamada de volta apenas quando usarmos o mouse na janela pop-up, que tem o título “Título da janela pop-up ”.
cv2.namedWindow ("Título da janela pop-up")
Exemplo 1: desenhe um círculo ao clicar com o botão esquerdo em um pop-up com OpenCV:
import
cv2
img
=
cv2.imread(
"flower.jpg"
)
def
draw_circle(event, x, y, flags, param):
if
event
=
=
cv2.EVENT_LBUTTONDOWN:
(
"hello"
)
cv2.circle(img, (x, y),
100
, (
0
,
255
,
0
),
-
1
)
cv2.namedWindow(winname
=
"Title of Popup Window"
)
cv2.setMouseCallback(
"Title of Popup Window"
, draw_circle)
while
True
:
cv2.imshow(
"Title of Popup Window"
, img)
if
cv2.waitKey(
10
) &
0xFF
=
=
27
:
break
cv2.destroyAllWindows()
Resultado:
O que (cv2.waitKey (10) & 0xFF == 27) faz?
cv2.waitKey() retorna um valor inteiro de 32 bits (pode ser dependente da plataforma). A entrada principal está em ASCII, que é um valor inteiro de 8 bits. Portanto, você só se preocupa com esses 8 bits e deseja que todos os outros bits sejam 0. Isso você pode conseguir com:cv2.waitKey(10) & 0xFF == 27
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