Skip navigation

Egyenes detekció OpenCV-ben

Egyenesek detektálása

Detektáljunk egyeneseket Hough transzformációval és rajzoljuk ki a képre!

  1. Nyissuk meg a képet!
  2. Konvertáljuk szürkeárnyalatossá az RGB képet!
  3. Keressünk éleket a képen Canny éldetektorral
  4. Keressünk egyeneseket az élképen a HoughLines() függvénnyel!
  5. Rajzoljuk ki az egyeneseket!

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

import cv2
import numpy as np
import math

## kép megnyitása
INPUT_IMAGE = "../Chessboard_002.jpg"
OUTPUT_IMAGE = "lines.png"
HOUGH_IMAGE = "HOUGH_lines.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ó
lines = cv2.HoughLines(edges, 1,np.pi/180, 200)

for l in lines:
    r = l[0,0]
    theta = l[0,1]
    print(r, theta, max(h,w)+int(r), int(math.degrees(theta))+180)    

    a = np.cos(theta)
    b = np.sin(theta)
    x0 = a * r;
    y0 = b * r;
    x1 = int(x0 + 1000*(-b))
    y1 = int(y0 + 1000*(a))
    x2 = int(x0 - 1000*(-b))
    y2 = int(y0 - 1000*(a))

    cv2. line( img, (x1,y1), (x2,y2), (0,255,0), 5)

cv2.imwrite(OUTPUT_IMAGE, img)