1 # a keppont osztály egy listából "építkezik" (lst),2 # mely egy RGB számhármas (lsd. 32. sor!)3 class keppont:4 def __init__(self,lst): 5 self.r=lst[0]6 self.g=lst[1]7 self.b=lst[2]8 9 def osszeg(self):10 return self.r+self.g+self.b11 12 def vilagos(self):13 if keppont.osszeg(self)>600:14 return True15 return False16 #-------------------------------------------------------------------------------------------17 # JELÖLÉS: "ko" az alábbi részekben egy keppont class-ba tartozó objektumot fog jelölni, |18 # (röviden: "ko" egy keppont objektum) |19 #-------------------------------------------------------------------------------------------20 21 kep=[] # ez lesz a 2 dimenziós mátrix22 # ---> egy képpont elérése: kep[i][j]---> keppont objektum23 # ---> azon belül R=kep[i][j].r, G=kep[i][j].g, B=kep[i][j].b24 25 def F1():26 fbe=open('kep.txt','r')27 # mátrix felépítése: olyan lista, melynek elemei OBJEKTUMOKBÓL álló listák28 for sor in fbe:29 sor=list(map(int,sor.strip().split())) # minden integer (egész szám) legyen30 # egy sor 640x3 számot tartalmaz, ezeket kell hármasával "csoportosítani"31 egy_sor=[]32 for p in range(0,640*3,3): # p - pixel (képpont)33 egy_sor.append(keppont(sor[p:p+3])) # itt "generálom" a keppont objektumokat34 kep.append(egy_sor) # egy_sor egy ko (objektum) lista35 36 fbe.close()37 # print(kep) - ennek a végrehajtása több, mint egy percig tartott a gépemen, pedig nem rossz gép:38 # Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz, 16GB RAM39 # utána az ablak bezárása majdnem kifagyáshoz vezetett, de aztán mégsem... :)40 41 def F2():42 print('2. feladat:')43 print('Kérem egy képpont adatait!')44 sor=int(input('Sor: '))-1 # 180 -1 az indexelés miatt!!!45 oszlop=int(input('Oszlop: '))-1 # 32046 ko=kep[sor][oszlop] # az adott sor és oszlop indexen egy keppont objektum van, ugye...47 R=ko.r 48 G=ko.g49 B=ko.b50 print(f'A képpont színe RGB({R},{G},{B})') # RGB(184,183,181)51 52 def F3():53 print('3. feladat:')54 # világos képpont: RGB-értékeinek összege 600-nál nagyobb 55 vk=056 # kep mátrix 2D bejárása, az elemei keppont objektumok, ugye:57 for kepsor in kep:58 for ko in kepsor:59 if ko.vilagos(): # alkalmazható az objektum "vilagos" metódusa (modulja)60 vk+=161 print(f'A világos képpontok száma: {vk}') # 783762 63 def kulcsfuggveny(ko):64 return ko.osszeg()65 66 def F4():67 print('4. feladat')68 # ELSŐ KÖRBEN minimumkeresés az RGB összegek között rendezéssel69 rendezett=sorted([sorted(kepsor,key=kulcsfuggveny) for kepsor in kep],key=lambda x: kulcsfuggveny(x[0])) 70 minimum=rendezett[0][0].osszeg()71 print(f'A legsötétebb pont RGB összege: {minimum}') # 19772 73 # MÁSODIK KÖRBEN szedjük össze a minimummal egyező képpontokat:74 minimumok=[] # egy biztos lesz...75 for kepsor in kep:76 for ko in kepsor:77 if ko.osszeg()==minimum:78 minimumok.append(ko) # minimumok listába beletesszük a mátrix elemét, a ko-t79 80 print('A legsötétebb pixelek színe:')81 for ko in minimumok: # minimumok egy ko-kat tartalmazó lista82 print(f'RGB({ko.r},{ko.g},{ko.b})') # RGB(0,85,112) RGB(0,86,111) RGB(0,86,111)83 84 def hatar(s,diff): # paraméterek: s ---> sor, d ---> eltérés85 # egy adott sorban van-e olyan hely, ahol az egymás melletti képpontok 86 # kék színösszetevőinek eltérése meghalad egy adott értéket (diff)87 88 kok_egy_sorban=kep[s] # ez egy lista, melynek elemei "ko"-k (kok), azaz keppont objektumok, ugye...89 90 # tudjuk, hogy egy sorban 640 képpont van, azaz 640 ko, -1 azért, hogy i. és i+1. képpontot nézhessük91 for i in range(640-1):92 if abs(kok_egy_sorban[i].b-kok_egy_sorban[i+1].b)>diff: # i. és i+1. képpont93 return True # ha találunk ilyen helyet, akkor True-t ad vissza a függvény (és itt le is áll)94 return False # ha mégsem állt le, akkor False értéket ad vissza a függvény95 96 def F6():97 print('6. feladat')98 differencia=1099 # legfelső sor keresése: # első sortól előre...100 sor=0101 while not hatar(sor,differencia):102 sor+=1103 print(f'A felhő legfelső sora: {sor+1}') # 103 (+1 indexelés és a sorszám közötti különbség)104 # legalsó sor keresése: # utolsó sortól visszafelé...105 sor=360-1 # indexelés, ugye...106 while not hatar(sor,differencia):107 sor-=1108 print(f'A felhő legalsó sora: {sor+1}') # 280 (+1 indexelés és a sorszám közötti különbség)109 110 # -------------------------------------------------------------------------------------------------------------------------111 F1()112 F2()113 F3()114 F4()115 116 F6()117 118 119