J'ai détecté et extrait le visage ici, mais j'ai pensé que je pourrais le réaliser en copiant sans trop réfléchir. Cette fois, je voulais essayer de détecter des objets autres que le visage, alors j'ai essayé de l'imiter même si je n'avais pas beaucoup de connaissances.
Aperçu du défi 9 du didacticiel opencv (zone) dans OpenCV
Jetez un œil à ceci.
C'est Apo.
Les trois suivants sont détectés.
Les trois images rectangulaires suivantes sont produites.
contour_detect.py
#!/usr/local/bin/python
#! -*- coding: utf-8 -*-
import cv2
import numpy as np
#Image spécifiée(path)Détecte l'objet et affiche l'image du rectangle circonscrit
def detect_contour(path):
#Charger l'image
src = cv2.imread(path, cv2.IMREAD_COLOR)
#Convertir en image en échelle de gris
gray = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY)
#Binarisation
retval, bw = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
#Extraire le contour
# contours : [Région][Point No][0][x=0, y=1]
# cv2.CHAIN_APPROX_NONE:Tenez le milieu
# cv2.CHAIN_APPROX_SIMPLE:Ne tenez pas le milieu
contours, hierarchy = cv2.findContours(bw, cv2.RETR_LIST, cv2.CHAIN_APPROX_NONE)
#Nombre de rectangles détectés (spécifiez 0 par défaut)
detect_count = 0
#Traitement pour chaque contour
for i in range(0, len(contours)):
#Calculer la zone de contour
area = cv2.contourArea(contours[i])
#Exclure le bruit (zone trop petite) et le contour global (zone trop grande)
if area < 1e2 or 1e5 < area:
continue
#Rectangle externe
if len(contours[i]) > 0:
rect = contours[i]
x, y, w, h = cv2.boundingRect(rect)
cv2.rectangle(src, (x, y), (x + w, y + h), (0, 255, 0), 2)
#Enregistrer l'image pour chaque rectangle extrinsèque
cv2.imwrite('{Chemin du fichier}' + str(detect_count) + '.jpg', src[y:y + h, x:x + w])
detect_count = detect_count + 1
#Afficher une image rectangulaire circonscrite
cv2.imshow('output', src)
cv2.waitKey(0)
#Terminer le traitement
cv2.destroyAllWindows()
if __name__ == '__main__':
detect_contour('{Chemin du fichier}/{nom de fichier}.jpg')
Recommended Posts