rgb202305.py
1    kep=[]          # ez lesz a 3 dimenziós mátrix
2                    # ---> egy képpont elérése: kep[i][j]---> [r,g,b]
3                    # ---> azon belül R=kep[i][j][0], G=kep[i][j][1], B=kep[i][j][2]
4    
5    def F1():
6        fbe=open('kep.txt','r')
7        #mátrix felépítése: olyan lista, melynek elemei LISTÁKBÓL álló listák
8        for sor in fbe:
9            sor=list(map(int,sor.strip().split()))  # minden integer (egész szám) legyen
10           # egy sor 640x3 számot tartalmaz, ezeket kell hármasával "csoportosítani"
11           egy_sor=[]
12           for p in range(0,640*3,3):      # p - pixel (képpont)
13               egy_sor.append(sor[p:p+3])
14           kep.append(egy_sor)
15               
16       fbe.close()
17       # print(kep) - ennek a végrehajtása több, mint egy percig tartott a gépemen, pedig nem rossz gép:
18       # Intel(R) Core(TM) i5-9400F CPU @ 2.90GHz, 16GB RAM
19       # utána az ablak bezárása majdnem kifagyáshoz vezetett, de aztán mégsem... :)
20   
21   def F2():
22       print('2. feladat:')
23       print('Kérem egy képpont adatait!')
24       sor=int(input('Sor: '))-1                       # 180    -1 az indexelés miatt!!!
25       oszlop=int(input('Oszlop: '))-1                 # 320
26       RGB=kep[sor][oszlop]    # az adott sor és oszlop indexen egy 3 elemű lista van (RGB)
27       R=RGB[0]
28       G=RGB[1]
29       B=RGB[2]
30       print(f'A képpont színe RGB({R},{G},{B})')      # RGB(184,183,181)
31   
32   def F3():
33       print('3. feladat:')
34       # világos képpont: RGB-értékeinek összege 600-nál nagyobb    
35       vk=0
36       # kep mátrix 2D bejárása, az elemei 3 elemű listák, ugye:
37       for kepsor in kep:
38           for keppont in kepsor:
39               if sum(keppont)>600:           # a listára alkalmazható a sum függvény
40                   vk+=1
41       print(f'A világos képpontok száma: {vk}')       # 7837
42   
43   def kulcsfuggveny(keppont):     # rendezéses minimumkereséshez kell...
44       return sum(keppont)
45   
46   def F4():
47       print('4. feladat')
48       # ELSŐ KÖRBEN klasszikus minimumkeresés az RGB összegek között
49       minimum=255*3    # ez a maximális RGB összeg, így biztos lesz nála kisebb!
50       # kep mátrix 2D bejárása, az elemei 3 elemű listák, ugye:
51       for kepsor in kep:
52           for keppont in kepsor:
53               if sum(keppont)<minimum:
54                   minimum=sum(keppont)
55   
56       # Vagy minimumkiválasztás rendezéssel:
57       rendezett=sorted([sorted(kepsor,key=kulcsfuggveny) for kepsor in kep],key=lambda x: kulcsfuggveny(x[0]))
58       minimum=sum(rendezett[0][0])
59       
60       # MÁSODIK KÖRBEN szedjük össze a minimummal egyező képpontokat:
61       minimumok=[]    # egy biztos lesz...
62       for kepsor in kep:
63           for keppont in kepsor:
64               if sum(keppont)==minimum:
65                   minimumok.append(keppont)          # minimumok listába beletesszük a mátrix elemét
66                   
67       print(f'A legsötétebb pont RGB összege: {minimum}')     # 197
68       print('A legsötétebb pixelek színe:')
69       for RGB in minimumok:       # RGB egy három elemű lista...
70           print(f'RGB({RGB[0]},{RGB[1]},{RGB[2]})')           # RGB(0,85,112)  RGB(0,86,111)  RGB(0,86,111)
71   
72   def hatar(s,d):     # paraméterek: s ---> sor, d ---> eltérés
73       # egy adott sorban van-e olyan hely, ahol az egymás melletti képpontok kék színösszetevőinek eltérése
74       # meghalad egy adott értéket
75       keppontok_egy_sorban=kep[s]        # ez egy lista, melynek elemei számhármasok, ugye...
76       # tudjuk, hogy egy sorban 640 képpont van, azaz 640 számhármas (RGB), -1 azért, hogy i. és i+1. képpontot nézhessük
77       for i in range(640-1):
78           if abs(keppontok_egy_sorban[i][2]-keppontok_egy_sorban[i+1][2])>d:      # i. és i+1. képpont
79               return True                   # ha találunk ilyen helyet, akkor True-t ad vissza a függvény (és itt le is áll)
80       return False                          # ha mégsem állt le, akkor False értéket ad vissza a függvény
81               
82   def F6():
83       print('6. feladat')
84       differencia=10
85       # legfelső sor keresése:                        # első sortól előre...
86       sor=0
87       while not hatar(sor,differencia):
88           sor+=1
89       print(f'A felhő legfelső sora: {sor+1}')        # 103   (+1 indexelés és a sorszám közötti különbség)
90       # legalsó sor keresése:                         # utolsó sortól visszafelé...
91       sor=360-1       # indexelés, ugye...
92       while not hatar(sor,differencia):
93           sor-=1
94       print(f'A felhő legalsó sora: {sor+1}')         # 280   (+1 indexelés és a sorszám közötti különbség)
95       
96   # -------------------------------------------------------------------------------------------------------------------------
97   F1()
98   F2()
99   F3()
100  F4()
101  
102  F6()
103                  
104  
105