Encontre blocos de cor

Tutorial em vídeo 4 - Reconhecimento de cores: https://singtown.com/learn/49993/

função localizar_blobs

O rastreio da bola é a função mais utilizada do OpenMV.\ Os blocos de cor podem ser encontrados através da função find_blobs.

image.find_blobs(thresholds, roi=Auto, x_stride=2, y_stride=1, invert=False, area_threshold=10, pixels_threshold=10, merge=False, margin=0, threshold_cb=None, merge_cb=None)

Existem aqui muitos parâmetros.

  • limites é o limite de cor. Se apenas necessitar de uma cor, necessita apenas de um valor de cor nesta lista. Se pretender vários limites de cor, esta lista necessita de vários limites de cor. Nota: Pode chamar o método de código no blob do objeto do bloco de cores devolvido para determinar a cor do bloco de cores.
red = (xxx,xxx,xxx,xxx,xxx,xxx)
blue = (xxx,xxx,xxx,xxx,xxx,xxx)
yellow = (xxx,xxx,xxx,xxx,xxx,xxx)

img=sensor.snapshot()
red_blobs = img.find_blobs([red])

color_blobs = img.find_blobs([red,blue, yellow])
  • roi é "região de interesse". Foi introduzido em Estatísticas de utilização.

    left_roi = [0,0,160,240]\ blobs = img.find_blobs([red],roi=left_roi)

  • x_stride é o pixel com a menor largura na direção x do bloco de cor que está a ser pesquisado. O predefinido é 2. Se apenas pretende encontrar blocos de cor com uma largura superior a 10 pixels, defina este parâmetro para 10:

    blobs = img.find_blobs([red],x_stride=10)

  • y_stride é o pixel com a menor largura na direção y do bloco de cor que está a ser pesquisado. O predefinido é 1. Se apenas pretende encontrar blocos de cor com uma largura superior a 5 pixels, defina este parâmetro para 5:

    blobs = img.find_blobs([red],y_stride=5)

  • inverter inverte o limite e procura cores diferentes do limite como limites

  • area_threshold limite de área, se a área enquadrada do bloco de cor for inferior a este valor, será filtrada

  • pixels_threshold limite de número de pixels, se o número de pixels no bloco de cor for inferior a este valor, será filtrado

  • merge Merge, se definido como True, depois mescle todos os blobs sobrepostos num só.\ NOTA: Isto irá fundir todos os blobs, independentemente da cor. Se quiser misturar blobs de várias cores, basta chamar find_blobs com limites de cores diferentes separadamente.

all_blobs = img.find_blobs([red,blue,yellow],merge=True)

red_blobs = img.find_blobs([red],merge=True)
blue_blobs = img.find_blobs([blue],merge=True)
yellow_blobs = img.find_blobs([yellow],merge=True)
  • limite da margem, se definido como 1, dois blobs serão fundidos se estiverem separados por um pixel.

limite

A estrutura de um limite de cor é assim:

red = (minL, maxL, minA, maxA, minB, maxB)

Os valores na tupla são os valores máximo e mínimo de L A B respetivamente.

Se pretender obter este limite na imagem IDE, consulte: [Começar rapidamente em 10 minutos] (/quick-starter.md)

Na nova versão do IDE, existe uma ferramenta de seleção de limites mais conveniente, ver abaixo.

Ferramenta de seleção de limite de cor

Foi adicionada uma ferramenta de seleção de limites ao OpenMV IDE, o que facilita muito a depuração dos limites de cor.

Primeiro execute o hello world.py para permitir que o framebuffer no IDE apresente o padrão.\ \ De seguida, abra Ferramentas → Mechine Vision → Editor de limites\

Clique em Frame Buffer para obter a imagem no IDE e em Ficheiro de imagem para selecionar você mesmo um ficheiro de imagem.

Arraste os seis controlos deslizantes para ver os resultados do limite em tempo real.

blobs é uma lista

O objeto find_blobs devolve uma lista de vários blobs. (Note-se a distinção entre blobs e blobs. Este é apenas um nome utilizado para distinguir vários blocos de cor de um bloco de cor).\ Uma lista é semelhante a um array na linguagem C. Uma lista de blobs contém muitos objetos blob.

blobs = img.find_blobs([red])

Os Blobs são muitos blocos de cores.

Pode utilizar um ciclo for para pesquisar todos os blocos de cor.

for blob in blobs:
    print(blob.cx())

Para utilizar ciclos for, consulte conhecimento prévio sobre python

objeto de bloco de cor blob

Blob tem vários métodos:

  • blob.rect() devolve o quadro externo deste bloco de cores - uma tupla retangular (x, y, w, h), que pode ser utilizada diretamente em image.draw_rectangle.

  • blob.x() devolve a coordenada x (int) do quadro exterior do bloco de cor, que também pode ser obtida através de blob[0].

  • blob.y() devolve a coordenada y (int) do quadro exterior do bloco de cor, que também pode ser obtida através de blob[1].

  • blob.w() devolve a largura w (int) do quadro exterior do bloco de cores, que também pode ser obtida através de blob[2].

  • blob.h() devolve a altura h (int) do quadro exterior do bloco de cor, que também pode ser obtida através de blob[3].

  • blob.pixels() devolve o número de pixéis do bloco de cor (int), que também pode ser obtido através de blob[4].

  • blob.cx() devolve a coordenada central x (int) do quadro exterior do bloco de cor, que também pode ser obtida através de blob[5].

  • blob.cy() devolve a coordenada central y (int) do quadro exterior do bloco de cor, que também pode ser obtida através de blob[6].

  • blob.rotation() devolve o ângulo de rotação do bloco de cor em radianos (float). Se o bloco de cores se assemelhar a um lápis, este valor será de 0 a 180°. Se a mancha colorida for um círculo, este valor será inútil. Se o bloco de cor não tiver qualquer simetria, obterá 0~360°, que também pode ser obtido através de blob[7].

  • blob.code() devolve um número de 16 bits, cada bit corresponde a cada limite. Por exemplo:

    blobs = img.find_blobs([red, blue, yellow], merge=True)

Se o bloco colorido for vermelho, o seu código será 0001, e se for azul, o seu código será 0010. Nota: Um blob pode ser fundido. Esta função pode ser utilizada para encontrar códigos de cores. Também pode ser obtido através do blob[8].

  • blob.count() Se merge=True, então vários blobs serão fundidos num blob, e esta função devolve este número. Se merge=False, o valor de retorno será sempre 1. Também pode ser obtido através do blob[9].

  • blob.area() devolve a área da caixa exterior do bloco de cores. Deve ser igual a (w * h)

  • blob.density() devolve a densidade do blob de cor. Isto é igual ao número de pixéis no patch dividido pela área da caixa delimitadora. Se a densidade for baixa, o alvo não está muito bem bloqueado.\ Por exemplo, para identificar um círculo vermelho, o blob.pixels() devolvido é o número de pixéis no círculo alvo e blob.area() é a área do quadrado circunscrito do círculo.

results matching ""

    No results matching ""