<< | #258 ; Ni manipulu fotoj per simpla programo |
>> |
Fotoj povas esti tre ekonomia kaj bona laborilo se oni ilin racie uzas. Bonaj senmovaj fotoj estas multe pli ekonomiaj ol movanta filmo. Tial ni volas por lerni kiel eble plej bone por trakti fotoj. Nun ni unue laboru sen OpenCV.
Apude vi vidas la malgrandan foton el kio ni nun startu. Estas malnova ponardo en ingo (kredeble el milita tempo, 1940-aj jaroj) el la eksa stacidomo de Kurikka. Vi vidas en la foto ankaŭ la - iom rustan - ŝtalan krudan materialon el kio oni startis por produkti la klingon de ponardo. Oni povas uzi ponardon ekzemple por mortigi malamikoj, sed kredeble en praktiko estis plejparte nur ornamaĵo de soldato.
La klingo de ponardo devas esti tre fortika ĉar origine - antaŭ tre longe - oni uzis ĝin por piki tra la malgrandaj truoj en la ŝirma kiraso de bone protektita kavaliro.
Jen iom da simpla Python -programo por manipuli la foton:
from PIL import Image from pylab import * # Kolora foto, grando 300x200 pil_im = Image.open('/home/pi/Kuvat/i4011.jpg') # Turnu la foton ponardo = pil_im.transpose(Image.ROTATE_180) # Selektu nur supran parton de foto box = (0, 0, 300, 135) ponardo = ponardo.crop(box) # Aliigu la grandon de selektita parto ponardo = ponardo.resize((400, 250)) # Savu la rezulton ponardo.save('/home/pi/Kuvat/ponardo.jpg')
La provizora rezulto de programo aperas maldekstre. Estas ioma rebrilo, reflekto de lumo el vitro en la foto. La ponardo nome estis post vitro.
Fakte en la programo estis ankaŭ la sekvanta parto, sed vi ne vidas tion rezulton kio estas tamen praktike la sama foto kiel apude:
imshow(ponardo) title('Ponardo, Kurikka') show()
La origina grando de foto estis 300 x 200 (kolonoj * vicoj). La pozo de foto estas nun iom alia, sed ni bone vidas la saman ponardon.
Unue en la supra programo ni turnis la foton. Ni selektis nur la interesan parton (kolonoj * vicoj 300 x 135
) de origina foto kaj ni aliigis la grandon de selektita parto de foto. La foto estas nun pli granda ol antaŭe. Ni rimarku ke la skalo estas iom alia ol origine. La selektita parto de foto estas relative pli alta.
Fine la nova vario de foto kaj nova datumo ricevis novan nomon ponardo.jpg
tial ke la origina datumo restu netuŝita.
Ni kontinuu por prilabori la foton per la programo. Ni montru kiel ni povas aliigi la originan foton en "nigra kaj blanka" vario. Unue ni manipulu varion pil_im
de origina foto. Ni kontinuu la supran programon.
from numpy import * ponardo = array(Image.open('/home/pi/Kuvat/ponardo.jpg').convert('L')) # Nigra kaj blanka foto pil_im = Image.fromarray(uint8(ponardo)) pil_im = pil_im.resize((330, 220)) pil_im = pil_im.transpose(Image.ROTATE_180) pil_im = pil_im.rotate(45) gray() imshow(pil_im) title('Ponardo el Kurikka') show()
Ni vidas la rezulton dekstre. La pozo de ponardoj ja estas tute alia. Parto de ponardoj falis ekster la foto kiam ni turnis la foton al alia pozo.
Kaj sekve ni vidu la originan foton ponardo.jpg
sed kiel vario "nigra kaj blanka" kaj iom malgrandigita:
Por tio ni uzis la sekvantan simplan programan parton:
print(ponardo.size) # 100000 print(ponardo.shape) # (250, 400) gray() imshow(ponardo) title('Nefinita kaj preta ponardo, Kurikka') show()
Ni rimarku la grandon de foto, 400 x 250 ( kolonoj * vicoj
da rastrunuoj )
Kaj jen ni fine vidas dekstre la randojn, la plej klarajn konturojn en la foto. La rezulta foto estas iom malgrandigita. Python volas savi malgrandajn fotojn en grando 640*480.
Kredeble oni povas vidi la konturon de ponardoj, sed tie certe estas ankaŭ iom da superflua konfuzo. Homoj estas multe pli bonaj ol simplaj komputilaj programoj por trovi konturoj de objektoj en fotoj.
figure() gray() contour(ponardo, origin='image') axis('equal') show()
Ĉi tioj ja estis nur simplaj rezultoj sen la granda programo OpenCV. Do certe eblas labori kun fotoj sen OpenCV sed kredeble estus pli facile por uzi la bonan laborilon.
Nu, ni plue laboru kaj ni pli multe lernu.
Kaj certe fine eble ..........
NI VENKOS!
La Ambasadoro en Pori de sendependa nacio Mueleja Insulo |