Skip navigation

Körök detektálása OpenCV-ben

Billiárdgolyók kijelölése

Az alábbi példában áttekintjük, hogy hogyan lehet köröket meghatározni a képeken. Ez a feladat olyan szempontból nehéz, hogy nem könnyű megmondani a keresett körök sugarát. A HoughCircles() függvény paramétereként megadható a minimális és maximális sugár, ezáltal beszűkíthető a keresési tér.

  1. Nyissuk meg a képet!
  2. Konvertáljuk a képet szürkeárnyalatossá!
  3. Canny éldetektorral keressünk a képen éleket.
  4. A HoughCircles() függvénnyel keressünk a képen köröket!
  5. Rajzoljuk rá a köröket a képre.

A példában az alábbi képet használtuk:

https://docs.opencv.org/3.1.0/dd/d1a/group__imgproc__feature.html#ga47849c3be0d0406ad3ca45db65a25d2d

import cv2
import numpy as np
import math

## kép megnyitása
INPUT_IMAGE = "../pool.jpg"
OUTPUT_IMAGE = "circles.png"
img = cv2.imread(INPUT_IMAGE)
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

## képméret lekérdezése
h,w = gray_img.shape


## élek kijelölése
edges = cv2.Canny(gray_img, 50, 15, apertureSize=3)

## Hough transzformáció
circles = cv2.HoughCircles(edges, cv2.HOUGH_GRADIENT, 2, 50, minRadius=0, maxRadius=80)

for c in circles[0,:]:
    cv2.circle(img,(c[0],c[1]),c[2],(0,255,0),5)    

cv2.imwrite(OUTPUT_IMAGE, img)