Skip navigation

Példa arcdetektálásra OpenCV-ben

Példa

A következőkben megnézzük, hogy hogyan lehet OpenCV-ben arcot detektálni. Ehhez a CascadeClassifier osztályt használjuk. Az arc detektáláshoz szükséges jellemzőleírás a haarcascade_frontalface_alt.xml fájlban található, amely az OpenCV data könyvtárában van.

Az  arcdetektáláshoz az alábbi lépéseket kell végrehajtani:

  1. Kép megnyitása.
  2. Kép szürkeárnyalatossá konvertálása
  3. A CascadeClassifier létrehozása.
  4. Detekció lefuttatása.
  5. Ellenőrizni kell, hogy a képen található-e arc.
  6. Ha található arc, akkor minden arc köré kirajzolunk egy zöld téglalapot, ha nem, akkor kiírjuk, hogy "Nem találtunk arcot a képen.".

A példában az alábbi képekkel dolgozunk (külön-külön):

  

import cv2
import numpy as np

## kép megnyitása
INPUT_IMAGE = "../NemethGabor_magyaraz.jpg"
#INPUT_IMAGE = "../wieliczkai_szobor.jpg"
img = cv2.imread(INPUT_IMAGE)
gray_img= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

## Haar-cascade leíró fájl
HAAR_CASCADE_FACE = "haarcascade_frontalface_alt.xml"

## detektor készítése és megnyitása
cascade = cv2.CascadeClassifier(HAAR_CASCADE_FACE)

## detekció
rects = cascade.detectMultiScale(gray_img, scaleFactor=1.3, minNeighbors=4, minSize=(30,30), flags=cv2.CASCADE_SCALE_IMAGE)
rects[:,2:] += rects[:,:2]

## van-e találat?
if len(rects) == 0:   ## nem találtunk arcot
    print("Nem találtunk arcot a képen.")

for x1, y1, x2, y2 in rects:
        cv2.rectangle(img, (x1, y1), (x2, y2), (0,255,0), 10)

cv2.imwrite("detected_faces.png", img)