2
respostas

Erro img_pontos

Bom dia. Meu codigo apresenta um erro, ja tentei mudar de tudo qualquer jeito e não consegui.

No momento de fazer o seguinte codigo :

img_pontos = cv2.drawKeypoints(img_suavizada, pontos_chave, outImage = np.array([]), flags=0)
cv2_imshow(img_pontos)

tenho seguinte erro : NameError: name 'pontos_chave' is not defined

Porém pontos_chave foi definido na função def get_descritores.

Pior que esse codigo funcionou ontem rs e hoje da erro .. Obrigada :)

2 respostas

Ola, acho que consegui resolver o problema, porém não sei se foi a melhor solução..

1) No primeiro momento modifiquei a função def get_descritores , no qual no returno fiz :

return (descritores,pontos_chave)

2) em seguida, fiz este codigo :

(descritores,pontos_chave) = get_descritores(img_caminho)

3) Na terceira parte, não trabalhei com np.ndarray e sim com tupla

4) e no final deu certo o codigo : img_pontos = cv2.drawKeypoints(img_suavizada, pontos_chave, outImage = np.array([]), flags=0) cv2_imshow(img_pontos)

Nesse caso qual é o melhor formato a tranalhar np array ou tupla (aqui fui na tentativa e erro, rs, mas não sei se foi o melhor caminho)

Obrigada

Oii Anne, como você está? Espero que esteja tudo bem com você.

Desculpas pela demora em obter um retorno.

O Google Colab, por padrão, irá manter um histórico de todas as funções e variáveis que foram executadas, por isso que ao seguir o mesmo procedimento feito durante as aulas funcionou corretamente, mesmo após ter modificado o retorno da função. Porém, ao fechá-lo e abri-lo novamente, esse histórico se perde e como a função foi modificada, tudo que se tem é o estado atual dela, sem o histórico das variáveis que ela retornava anteriormente.

Para corrigir isso, temos que retornar as variáveis img_suavizada, pontos_chave e descritor na função get_descritores, como mostro abaixo:

def get_descritores(img_caminho):

  LARGURA = 360
  ALTURA = 360

  # Ler a imagem
  img_teste = cv2.imread(img_caminho, 0)

  # Redimensionar a imagem
  img_redimensionada = cv2.resize(img_teste, (LARGURA, ALTURA), interpolation=cv2.INTER_CUBIC)

  # Remover ruídos
  img_equalizada = cv2.equalizeHist(img_redimensionada)
  img_suavizada = cv2.GaussianBlur(img_equalizada, (9, 9), 1)

  # Detectar os pontos chaves
  orb = cv2.ORB_create(nfeatures=512)
  pontos_chave = orb.detect(img_suavizada, None)

  pontos_chave, descritores = orb.compute(img_suavizada, pontos_chave)

  return img_suavizada, pontos_chave, descritores

E a chamada ficará da seguinte forma:

img_suavizada, pontos_chave, descritor = get_descritores(img_caminho)
print(f'TIPO: {type(descritor)}')
print(f'FORMATO DESCRITOR: {descritor.shape}')
print(f'DESCRITOR: {descritor}')
img_pontos = cv2.drawKeypoints(img_suavizada, pontos_chave, outImage = np.array([]), flags=0)
cv2_imshow(img_pontos)

Vale ressaltar que sua abordagem para correção apesar de sanar o erro não precisava necessariamente do uso das tuplas. E parabéns pela persistência em solucionar o erro que estava enfrentando.

Qualquer dúvida fico à disposição.

Grande abraço e bons estudos!