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