error in openCv Python drawContorns

Asked

Viewed 189 times

0

I’m trying to paint the contours of an image.

Follows the Code:

import cv2
import numpy as np
img = cv2.imread('./assets/placa.jpg')
cv2.imshow('texto', img)

# trasnformando a imagem em cinza para reconhecer padroes

cinza = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#cv2.imshow('cinza', cinza)

_,bin = cv2.threshold(cinza, 90, 255, cv2.THRESH_BINARY) # limite maximo das cores
#cv2.imshow('bin', bin)

#tirar os ruidos e amplificar as formas geometricas
#para encontrar melhor os contornos
desfoque = cv2.GaussianBlur(bin, (5,5),0)
#cv2.imshow('des', desfoque)

#procurar os contornos, procura contornos dentro dos contornos, aproxima os contornos
_ ,contornos = cv2.findContours(desfoque, cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
#retorna 3 parametros, 1)imagens, 2contornos,3) hierarquia dos contornos

#imagem, contornos, (-1) são todos, a cor, espessura
cv2.drawContours(img , contornos, -1, (0,255,0),2)
cv2.imshow('cont',desfoque)

cv2.waitKey(0)
cv2.destroyAllWindows()

when I run, returns the following error:

Traceback (most recent call last):
  File "C:/Users/Leandro Moraes/Desktop/projetos/aps/src/tradutor.py", line 24, in <module>
    cv2.drawContours(img , contornos, -1, (0,255,0),1)
cv2.error: OpenCV(4.1.1) C:\projects\opencv-python\opencv\modules\imgproc\src\drawing.cpp:2509: error: (-215:Assertion failed) npoints > 0 in function 'cv::drawContours'

someone can give me a help ??

1 answer

0

Some problems in your code, the first is that it does not show the outlines drawn for two reasons:

  1. In function cv2.drawContours(img , contornos, -1, (0,255,0),2) you draw the outlines in img, while the image shown is blurred: cv2.imshow('cont', desfoque)
  2. The gray scale conversion is performed, ie the image has only one channel, and you are trying to paint the color (0, 255, 0), which is green in BGR and has three channels. To get around this problem, convert again to the BGR color space.

Another problem is function compatibility findcontours with the various versions of Opencv.

Code

Follow the code to correct these errors:

import cv2
import numpy as np

img = cv2.imread('./assets/placa.jpg')
# cv2.imshow('texto', img)

# trasnformando a imagem em cinza para reconhecer padroes

cinza = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# cv2.imshow('cinza', cinza)

_, bin = cv2.threshold(cinza, 90, 255, cv2.THRESH_BINARY) # limite maximo das cores
# cv2.imshow('bin', bin)

# tirar os ruidos e amplificar as formas geometricas
# para encontrar melhor os contornos
desfoque = cv2.GaussianBlur(bin, (5,5),0)
# cv2.imshow('des', desfoque)

#procurar os contornos, procura contornos dentro dos contornos, aproxima os contornos
tmp = cv2.findContours(desfoque, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# compatibilidade entre versões diferentes do OpenCV
contornos = tmp[0] if len(tmp) == 2 else tmp[1]
#retorna 3 parametros, 1)imagens, 2contornos,3) hierarquia dos contornos

#Conversão de escala de cinza para BGR
desfoque = cv2.cvtColor(desfoque, cv2.COLOR_GRAY2BGR)

#imagem, contornos, (-1) são todos, a cor, espessura
cv2.drawContours(desfoque, contornos, -1, (0, 255, 0), 2)
cv2.imshow('cont',desfoque)

cv2.waitKey(0)
cv2.destroyAllWindows()

Browser other questions tagged

You are not signed in. Login or sign up in order to post.