Primjeri
Kao vlastite primjere sam odlučio iskoristiti jednostavan način obrade slika i videa ove biblioteke. U primjerima se spominje obrada slika (blending), zatim dodavanje efekata na kameru i na kraju program za prepoznavanje ljudskog lica na slikama.
Primjer 1
Blending slika
import cv2
import numpy as np
#ucitavanje prve slike
img1 = cv2.imread('foi_zgrada.jpg')
#ucitavanje druge slike
img2 = cv2.imread('foi_logo.jpg')
#blending -> postavljanje opacity-ja za pojedinu sliku
src = cv2.addWeighted(img1,0.50,img2,0.60,0)
while(1):
#resize slike (jer je 1600*1200) skaliranje faktorom 0.5
dst = cv2.resize(src,None,fx=0.5, fy=0.5, interpolation = cv2.INTER_AREA)
#prikaz
cv2.imshow('image', dst)
k = cv2.waitKey(1)
if k == 27:
break
cv2.destroyAllWindows()
Korištenjem blend efekta nad slikama se dobije slijedeća slika.
Primjer 2
Efekti nad kamerom
Ranije smo vidjeli na koji način je moguće upravljati kamerom iz openCV-a. Slijedeći primjer radi sa efektima nad slikom iz kamere.
import numpy as np
import cv2
from itertools import cycle
# postavljanje izvora videa
# arg1 -> id kamere
cap = cv2.VideoCapture(0)
# postavljanje pocetne vrijednosti varijable func
func = 4
while(True):
# dohvaćanje slika (frame po frame)
ret, frame = cap.read()
# operacije nad frameovima
if func == 0:
frm = cv2.Laplacian(frame,cv2.CV_64F)
elif func == 1:
frm = cv2.GaussianBlur(frame,(0,0),5)
elif func == 2:
frm = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
elif func == 3:
frm = cv2.Canny(frame, 5, 100)
else:
frm = cv2.cvtColor(frame, 0)
# prikaz konacnog framea
cv2.imshow('frame',frm)
#dohvacanje tipke i promjena func varijable te postavljanje efekta
key = cv2.waitKey(1)
if key == 27:
break
if key == ord('a'):
print func
func = 1
if key == ord('s'):
func = 0
if key == ord('d'):
func = 2
if key == ord('f'):
func = 3
# cleanup i gašenje prozora
cap.release()
cv2.destroyAllWindows()
Odabirom pojedinih tipki se mijenja efekt nad izlazom kamere. 'a' -> GaussianBlur 's' -> Laplacian gradient filter 'd' -> Crno bijela slika 'f' -> Canny edge detection
Primjer 3
Prepoznavanje lica na slici
Slijedeći primjer se bavi prepoznavanjem lica sa slika. Radi se o 'Haar feature-based Cascade Classifier-u', poznatom algoritmu koji koristi strojno učenje za prepoznavanje lica. Algoritam radi na principu treniranja, gdje je funkcija za prepoznavanje "trenirana" sa mnoštvom slika (onih s licimai onih bez) te na taj način raspoznaje dijelove koji predstavljaju lica i one koji to nisu.
import numpy as np
import cv2
# učitavanje xml datoteke sa "trening podacima" za prepoznavanje lica
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# učitavanje xml datoteke sa "trening podacima" za prepoznavanje oka
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')
# učitavanje slike
img = cv2.imread('people.jpg')
#kreiranje crno-bijele slike
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# detektira objekte (lica) različitih veličina sa slike (vraća listu objekata)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#petlja kroz objekte
for (x,y,w,h) in faces:
# označavanje lica kvadratom
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
# nad svakim licem detektira objekte koji imaju oblik "očiju"
eyes = eye_cascade.detectMultiScale(roi_gray)
# petlja kroz listu objekata oka
for (ex,ey,ew,eh) in eyes:
# označavanje oka kvadratom
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
while True:
# prikaz slike
cv2.imshow('img',img)
#na tipku ESC gasi program
key = cv2.waitKey(0)
if key == 27:
break;
cv2.destroyAllWindows()