iansilva6 / PICG

0 stars 0 forks source link

Marcação de Objetos na Imagem #5

Open iansilva6 opened 5 years ago

iansilva6 commented 5 years ago

%matplotlib inline import numpy as np import cv2 import imutils import matplotlib.pyplot as plt

Carrega a imagem

image = cv2.imread("image_teste.png") gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Exibe a imagem original

plt.imshow(image) plt.show()

Busca todas a bordas de objetos e desenha contordos sobre elas

cnts = cv2.findContours(gray.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) cnts = imutils.grab_contours(cnts) clone = image.copy() cv2.drawContours(clone, cnts, -1, (0, 255, 0), 2) print("{} Contornos encontrados".format(len(cnts)))

Exibe a imagem

plt.imshow(clone) plt.show()

for (i, c) in enumerate(cnts):

calcular a área e o perímetro do contorno

area = cv2.contourArea(c)
perimeter = cv2.arcLength(c, True)
print("Contorno #{} -- area: {:.2f}, perimetro: {:.2f}".format(i + 1, area, perimeter))

# desenhe o contorno na imagem
cv2.drawContours(clone, [c], -1, (0, 255, 0), 2)

# calcular o centro do contorno e desenhar o número do contorno
M = cv2.moments(c)
cX = int(M["m10"] / M["m00"])
cY = int(M["m01"] / M["m00"])
cv2.putText(clone, "#{}".format(i + 1), (cX - 20, cY), cv2.FONT_HERSHEY_SIMPLEX,
    1.25, (255, 255, 255), 4)

Exibe imagem

plt.imshow(clone) plt.show()

clone = image.copy()

loop sobre os contornos

for c in cnts:

encaixar uma caixa delimitadora no contorno

(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(clone, (x, y), (x + w, y + h), (0, 255, 0), 2)

mostra a imagem de saída

plt.imshow(clone) plt.show() clone = image.copy()