Arvutiteaduse instituut
  1. Esileht
  2. IT koolidele
EN
Logi sisse

IT koolidele

  • OpenCV sissejuhatus
  • OpenCV paigaldamine
  • Vajalike materjalide allalaadimine
  • Mis on pilt?
  • Pildid
  • Kaamera kasutamine
  • Pilditöötlus
  • Objektide tuvastus
  • Lisa: Panoraam

Pilditöötlus

Eesmärk:

  • Osata muuta piltide värvispektrume.
  • Otsime videolt kindlat värvi objekte.
  • Otsime pildilt ääri.
  • Oskab tuvastada maantesõidurada nagu Elon Muski Tesla'd.

Värviruumi muutmine

Varasemalt rääkisime, et olemas on RGB värvimudel. OpenCV'l on olemas üle 150 värviruumi muutmise funktsiooni, kuid selles peatükis käsitleme kahte, BGR->Gray ja BGR-> HSV.

BGR - Blue Green Red

Gray - grayscale image

HSV - Hue Saturation Value

Värviruumi teisendamiseks kasutame funktsiooni cv.cvtColor(pilt, värv) . Tavalisest pildist halli pildi teisendamiseks kasutame cv.COLOR_BGR2GRAY, Sarnaselt BGR->HSV teisendus käib cv.COLOR_BGR2HSV.

Näidis muutmine BGR->HSV.

import cv2 as cv
pilt = cv.imread("värv.jpg")
teisendus = cv.cvtColor(pilt, cv.COLOR_BGR2HSV)

cv.imshow("algne pilt", pilt)
cv.imshow("muudetud pilt", teisendus)
cv.waitKey(0)
cv.destroyAllWindows()

Erinevaid värvilahendusi saad vaadata siit.

Värvi tuvastamine videos:

  • Võtame iga kaadri videost
  • Muudame värvispektrumi RGB -> HSV
  • Piirame HSV pilti punase värvi vahemikule
  • Punane objekt on eraldi nähtav
import cv2 as cv
import numpy as np

cap = cv.VideoCapture(0)

while(1):
    #analüüsime igat video kaadrit
     _, frame = cap.read()

     # Muudame BGR to HSV
     hsv = cv.cvtColor(frame, cv.COLOR_BGR2HSV)

     # määrame punase värvi vahemiku
     madal_punane = np.array([110,50,50])
     kõrge_punane = np.array([130,255,255])

    # piirame HSV pilti, et saada ainult punane värv
     mask = cv.inRange(hsv, madal_punane, kõrge_punane)

    # Bitwise operatsioon, et näha lõpptulemust
     res = cv.bitwise_and(frame,frame, mask= mask)

     cv.imshow('frame',frame)
     cv.imshow('mask',mask)
     cv.imshow('res',res)
     if cv.waitKey(5) == ord('q'):
        break

cv.destroyAllWindows()

PS! Analüüs ei ole täiuslik ning vaja on parameetreid muuta, et saada parem tulemus. See on üks lihtsamaid viise objektide tuvastamiseks. Parema tulemuse saavutamiseks peaks jäädvustava kaamera videol olema võimalikult hea valgus ja vähe segavaid faktoreid.

Kuidas leida HSV väärtusi, mida jälgida?

green = np.uint8([[[0,255,0 ]]])
hsv_green = cv.cvtColor(green,cv.COLOR_BGR2HSV)
print( hsv_green )
Vastus: [[[ 60 255 255]]]

Ülesanne: Loo programm, mis tuvastab videolt sinist värvi.

Äärte tuvastamine

Selles osas käsitleme põgusalt Canny Edge Detection äärte tuvastus algoritmi. Laadi alla pilt siit.

import cv2 as cv
img = cv.imread("auto.jpg", cv.IMREAD_GRAYSCALE)
edges = cv.Canny(img, 100,200)
cv.imshow("Tavaline", img)
cv.imshow("Canny", edges)
cv.waitKey(0)
cv.destroyAllWindows()

Maantee sõiduraja jälgimine

Kasutame HoughLinesP funktsiooni, et kaamera suudaks tuvastada sõiduraja jooned. Ja kuna oskame ka juba piltide peale joonistada, siis joonistame rohelised jooned tuvastatud joontele.

import cv2
import numpy as np
img = cv2.imread("auto.jpg")
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,50,150,apertureSize = 3)
cv2.imshow("edges",edges)
lines = cv2.HoughLinesP(edges, 1,np.pi/180,100,minLineLength=100,maxLineGap=10)
for line in lines:
    x1,y1,x2,y2 = line[0]
    cv2.line(img,(x1,y1),(x2,y2),(0,255,0),2)
cv2.imshow("image",img)
cv2.waitKey(0)
cv2.destroyAllWindows()

Kaamera tuvastas jooni ka mujal, kui ainult sõiduteel. Äkki oleks võimalik kaamera otsimispiirkonda vähendada ainult vaatevälja alumisele osale?

  • Arvutiteaduse instituut
  • Loodus- ja täppisteaduste valdkond
  • Tartu Ülikool
Tehniliste probleemide või küsimuste korral kirjuta:

Kursuse sisu ja korralduslike küsimustega pöörduge kursuse korraldajate poole.
Õppematerjalide varalised autoriõigused kuuluvad Tartu Ülikoolile. Õppematerjalide kasutamine on lubatud autoriõiguse seaduses ettenähtud teose vaba kasutamise eesmärkidel ja tingimustel. Õppematerjalide kasutamisel on kasutaja kohustatud viitama õppematerjalide autorile.
Õppematerjalide kasutamine muudel eesmärkidel on lubatud ainult Tartu Ülikooli eelneval kirjalikul nõusolekul.
Courses’i keskkonna kasutustingimused