rgb202305_class.py
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.b
11   
12       def vilagos(self):
13           if keppont.osszeg(self)>600:
14               return True
15           return False
16   #-------------------------------------------------------------------------------------------
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átrix
22                   # ---> egy képpont elérése: kep[i][j]---> keppont objektum
23                   # ---> azon belül R=kep[i][j].r, G=kep[i][j].g, B=kep[i][j].b
24   
25   def F1():
26       fbe=open('kep.txt','r')
27       # mátrix felépítése: olyan lista, melynek elemei OBJEKTUMOKBÓL álló listák
28       for sor in fbe:
29           sor=list(map(int,sor.strip().split()))  # minden integer (egész szám) legyen
30           # 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 objektumokat
34           kep.append(egy_sor)                         # egy_sor egy ko (objektum) lista
35               
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 RAM
39       # 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                 # 320
46       ko=kep[sor][oszlop]     # az adott sor és oszlop indexen egy keppont objektum van, ugye...
47       R=ko.r                
48       G=ko.g
49       B=ko.b
50       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=0
56       # 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+=1
61       print(f'A világos képpontok száma: {vk}')       # 7837
62   
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éssel
69       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}')     # 197
72   
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-t
79                   
80       print('A legsötétebb pixelek színe:')
81       for ko in minimumok:       # minimumok egy ko-kat tartalmazó lista
82           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és
85       # 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ük
91       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éppont
93               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ény
95               
96   def F6():
97       print('6. feladat')
98       differencia=10
99       # legfelső sor keresése:                        # első sortól előre...
100      sor=0
101      while not hatar(sor,differencia):
102          sor+=1
103      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-=1
108      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