consolidate all repos to one for archive
This commit is contained in:
BIN
semester_4/osnove_racunalniskega_vida/Naloga_1/lenna.png
Normal file
BIN
semester_4/osnove_racunalniskega_vida/Naloga_1/lenna.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 463 KiB |
89
semester_4/osnove_racunalniskega_vida/Naloga_1/main.py
Normal file
89
semester_4/osnove_racunalniskega_vida/Naloga_1/main.py
Normal file
@@ -0,0 +1,89 @@
|
||||
from math import floor
|
||||
import cv2
|
||||
import numpy as np
|
||||
import matplotlib.pyplot as plt
|
||||
import tkinter as tk
|
||||
|
||||
visina_male_slike = 240
|
||||
|
||||
sirina_male_slike = 320
|
||||
|
||||
mali_kvadrat = 0.3
|
||||
|
||||
def doloci_barvo_koze(slika, levo_zgoraj, desno_spodaj):
|
||||
roi = slika[levo_zgoraj[1]:desno_spodaj[1], levo_zgoraj[0]:desno_spodaj[0]]
|
||||
spodnja_meja_koze = np.array([np.min(roi[:,:,0]), np.min(roi[:,:,1]), np.min(roi[:,:,2])])
|
||||
zgornja_meja_koze = np.array([np.max(roi[:,:,0]), np.max(roi[:,:,1]), np.max(roi[:,:,2])])
|
||||
return (spodnja_meja_koze,zgornja_meja_koze)
|
||||
|
||||
def zmanjsaj_sliko(slika):
|
||||
return cv2.resize(slika,(sirina_male_slike, visina_male_slike))
|
||||
|
||||
def obdelaj_sliko(slika, okno_sirina, okno_visina, barva_koze_spodaj, barva_koze_zgoraj):
|
||||
height, width = slika.shape[:2]
|
||||
heightRep = floor( 1 / okno_visina )
|
||||
subImgH = floor( height * okno_visina)
|
||||
widthRep = floor( 1 / okno_sirina )
|
||||
subImgW = floor (width * okno_sirina)
|
||||
|
||||
maxPoint1 = 0
|
||||
maxPoint2 = 0
|
||||
maxRatio = 0.0
|
||||
|
||||
for x in range(heightRep):
|
||||
for y in range(widthRep):
|
||||
point1 = y * subImgW
|
||||
point2 = x * subImgH
|
||||
subImg = slika[point2 : point2 + subImgH-1, point1: point1 + subImgW-1]
|
||||
ratio = prestej_piksle_z_barvo_koze(subImg, barva_koze_spodaj, barva_koze_zgoraj)
|
||||
ratio = round(ratio, 2)
|
||||
if ratio > maxRatio:
|
||||
maxRatio = ratio
|
||||
maxPoint1 = point1
|
||||
maxPoint2 = point2
|
||||
|
||||
maxRatio = round(maxRatio, 2)
|
||||
slika = cv2.rectangle(slika, (maxPoint1, maxPoint2), (maxPoint1 + subImgW, maxPoint2 + subImgH), ( 0, 255, 0 ), 1 )
|
||||
slika = cv2.putText(slika, str(maxRatio), (maxPoint1, maxPoint2+subImgH), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2, cv2.LINE_AA)
|
||||
return slika
|
||||
|
||||
def prestej_piksle_z_barvo_koze(podslika, barva_koze_spodaj, barva_koze_zgoraj):
|
||||
mask = cv2.inRange(podslika, barva_koze_spodaj, barva_koze_zgoraj)
|
||||
white_pixels = cv2.countNonZero(mask)
|
||||
return (white_pixels / mask.size)
|
||||
|
||||
|
||||
cap = cv2.VideoCapture(0)
|
||||
if cap.isOpened() == False:
|
||||
print("Ne morem odpreti kamere")
|
||||
|
||||
for x in range(30):
|
||||
ret, frame = cap.read()
|
||||
if ret == True:
|
||||
pass
|
||||
else:
|
||||
pass
|
||||
|
||||
ret, frame = cap.read()
|
||||
if ret == True:
|
||||
r = cv2.selectROI("select the area", frame)
|
||||
cv2.destroyAllWindows()
|
||||
levo_zgoraj = ( r[0], r[1] )
|
||||
desno_spodaj = ( r[0] + r[2], r[1] + r[3] )
|
||||
limitLow, limitHigh = doloci_barvo_koze(frame, levo_zgoraj, desno_spodaj)
|
||||
|
||||
cv2.namedWindow("Kamera")
|
||||
while True:
|
||||
ret, frame = cap.read()
|
||||
if ret == True:
|
||||
frame = cv2.flip(frame,1)
|
||||
#smallImg = zmanjsaj_sliko(frame)
|
||||
obdelanaSlika = obdelaj_sliko(frame, mali_kvadrat, mali_kvadrat, limitLow, limitHigh)
|
||||
imgDraw = np.zeros(obdelanaSlika.shape, np.uint8)
|
||||
cv2.imshow("Kamera",obdelanaSlika | imgDraw)
|
||||
if cv2.waitKey(10) & 0xFF == ord('q'):
|
||||
break
|
||||
else:
|
||||
break
|
||||
cap.release()
|
||||
cv2.destroyAllWindows()
|
Reference in New Issue
Block a user