Práca s obrázkami v Jave

1. Prehľad

V tomto výučbe sa pozrieme na niekoľko dostupných knižníc na spracovanie obrázkov a vykonáme jednoduchú operáciu spracovania obrazu - načítanie obrázka a nakreslenie tvaru.

Vyskúšame knižnicu AWT (a trochu Swing), ImageJ, OpenIMAJ a TwelveMonkeys.

2. AWT

AWT je vstavaná knižnica Java, ktorá umožňuje používateľovi vykonávať jednoduché operácie spojené s displejom, ako je napríklad vytváranie okna, definovanie tlačidiel a poslucháčov atď. Zahŕňa tiež metódy, ktoré umožňujú používateľovi upravovať obrázky. Nevyžaduje inštaláciu, pretože sa dodáva s jazykom Java.

2.1. Načítava sa obrázok

Prvá vec je vytvoriť a BufferedImage objekt z obrázka uloženého na našej diskovej jednotke:

Reťazec imagePath = "cesta / k / tvojmu / image.jpg"; BufferedImage myPicture = ImageIO.read (nový súbor (imagePath)); 

2.2. Úpravy obrázka

Ak chcete nakresliť tvar na obrázok, budeme musieť použiť Grafika objekt súvisiaci s načítaným obrázkom. Grafika objekt zapuzdruje vlastnosti potrebné na vykonávanie základných operácií vykreslenia. Graphics2D je trieda rozširujúca Grafika. Poskytuje väčšiu kontrolu nad dvojrozmernými tvarmi.

V tomto konkrétnom prípade potrebujeme Graphic2D rozšíriť šírku tvaru, aby bola dobre viditeľná. Dosahujeme to zväčšením jeho stroke nehnuteľnosť. Potom nastavíme farbu a nakreslíme obdĺžnik tak, aby bol tvar od okrajov obrázka desať pixelov:

Graphics2D g = (Graphics2D) myPicture.getGraphics (); g.setStroke (nový BasicStroke (3)); g.setColor (Color.BLUE); g.drawRect (10, 10, myPicture.getWidth () - 20, myPicture.getHeight () - 20); 

2.3. Zobrazenie obrázka

Teraz, keď sme niečo nakreslili na náš obrázok, by sme to chceli zobraziť. Môžeme to urobiť pomocou knižničných objektov Swing. Najskôr tvoríme JLabel objekt, ktorý predstavuje zobrazovaciu plochu pre text alebo obrázok:

JLabel picLabel = nový JLabel (nový ImageIcon (myPicture));

Potom pridajte náš JLabel do JPanel, s ktorým môžeme zaobchádzať ako grafického používateľského rozhrania založeného na prostredí Java:

JPanel jPanel = nový JPanel (); jPanel.add (picLabel);

Na záver všetko pridáme JFrame čo je okno zobrazené na obrazovke. Musíme nastaviť veľkosť, aby sme nemuseli rozširovať toto okno pri každom spustení nášho programu:

JFrame f = nový JFrame (); f.setSize (new Dimension (myPicture.getWidth (), myPicture.getHeight ())); f.add (jPanel); f.setVisible (true);

3. ObrázokJ

ImageJ je softvér založený na prostredí Java vytvorený na prácu s obrázkami. Má pomerne veľa doplnkov, ktoré sú k dispozícii tu. Budeme používať iba API, pretože chceme vykonať spracovanie sami.

Je to dosť výkonná knižnica, lepšia ako Swing a AWT, pretože jej účelom vytvorenia bolo spracovanie obrazu a nie operácie GUI. Pluginy obsahujú veľa voľne použiteľných algoritmov, čo je dobrá vec, keď sa chceme naučiť spracovanie obrazu a rýchlo vidieť výsledky, a nie riešiť matematické a optimalizačné problémy založené na algoritmoch IP.

3.1. Maven závislosť

Ak chcete začať pracovať s programom ImageJ, jednoducho do projektu pridajte závislosť pom.xml spis:

 net.imagej ij 1,51h 

Najnovšiu verziu nájdete v úložisku Maven.

3.2. Načítava sa obrázok

Na načítanie obrázka musíte použiť openImage () statická metóda, z IJ trieda:

ImagePlus imp = IJ.openImage ("cesta / k / tvojmu / image.jpg");

3.3. Úpravy obrázka

Na úpravu obrázka budeme musieť použiť metódy z ImageProcessor objekt pripojený k nášmu ImagePlus objekt. Ber to ako Grafika objekt v AWT:

ImageProcessor ip = imp.getProcessor (); ip.setColor (Color.BLUE); ip.setLineWidth (4); ip.drawRect (10, 10, imp.getWidth () - 20, imp.getHeight () - 20);

3.4. Zobrazenie obrázka

Musíte iba zavolať šou() metóda ImagePlus objekt:

imp.show ();

4. Otvorte IMAJ

OpenIMAJ je sada knižníc Java zameraných nielen na počítačové videnie a spracovanie videa, ale aj na strojové učenie, spracovanie zvuku, prácu s Hadoopom a oveľa viac. Všetky časti projektu OpenIMAJ nájdete tu v časti „Moduly“. Potrebujeme iba časť na spracovanie obrazu.

4.1. Maven závislosť

Ak chcete začať pracovať s OpenIMAJ, jednoducho pridajte do projektu závislosť pom.xml spis:

 org.openimaj core-image 1.3.5 

Najnovšie vydanie nájdete tu.

4.1. Načítava sa obrázok

Ak chcete načítať obrázok, použite ImageUtilities.readMBF () metóda:

MBFImage image = ImageUtilities.readMBF (nový súbor ("cesta / k / vášmu / image.jpg")); 

MBF znamená viacpásmový obraz s pohyblivou rádovou čiarkou (RGB v tomto príklade, ale nie je to jediný spôsob, ako reprezentovať farby).

4.2. Úpravy obrázka

Ak chcete nakresliť obdĺžnik, musíme definovať jeho tvar, ktorý je mnohouholník pozostávajúci zo 4 bodov (vľavo hore, vľavo dole, vpravo dole, vpravo hore):

Point2d tl = nový Point2dImpl (10, 10); Point2d bl = nový Point2dImpl (10, image.getHeight () - 10); Point2d br = nový Point2dImpl (image.getWidth () - 10, image.getHeight () - 10); Point2d tr = nový Point2dImpl (image.getWidth () - 10, 10); Polygon polygon = new Polygon (Arrays.asList (tl, bl, br, tr));

Ako ste si mohli všimnúť, pri spracovaní obrazu je os Y obrátená. Po definovaní tvaru ho musíme nakresliť:

image.drawPolygon (mnohouholník, 4, nový plavák [] {0f, 0f, 255.0f});

Metóda kreslenia obsahuje 3 argumenty: tvar, hrúbku čiary a hodnoty RGB kanála vyjadrené znakom Plavák pole.

4.3. Zobrazenie obrázka

Musíme použiť DisplayUtilities:

DisplayUtilities.display (obrázok);

5. Dvanásť opícImageIO

The Dvanásť opícImageIO knižnica je zamýšľaná ako rozšírenie Java ImageIO API, s podporou väčšieho počtu formátov.

Tento kód bude väčšinou vyzerať rovnako ako vstavaný kód Java, ale po pridaní potrebných závislostí bude fungovať s ďalšími formátmi obrázkov.

Predvolene Java podporuje pre obrázky iba týchto päť formátov: JPEG, PNG, BMP, WEBMP, GIF.

Ak sa pokúsime pracovať so súborom obrázka v inom formáte, naša aplikácia ho nebude môcť prečítať a použije znak a NullPointerException pri prístupe k BufferedImage premenná.

Dvanásť opíc pridáva podporu pre nasledujúce formáty: PNM, PSD, TIFF, HDR, MFF, PCX, OBRÁZOK, SGI, TGA, ICNS, ICO, CUR, Palec.db, SVG, WMF.

Aby sme mohli pracovať s obrázkami v konkrétnom formáte, musíme pridať zodpovedajúcu závislosť, napríklad imageio-jpeg alebo imageio-tiff.

Celý zoznam závislostí nájdete v dokumentácii TwelveMonkeys.

Vytvorme príklad, ktorý znie a .ico obrázok. Kód bude vyzerať rovnako ako kód AWT časť, ibaže otvoríme iný obrázok:

Reťazec imagePath = "cesta / k / tvojmu / image.ico"; BufferedImage myPicture = ImageIO.read (nový súbor (imagePath));

Aby tento príklad fungoval, musíme pridať Dvanásť opíc závislosť, ktorá obsahuje podporu pre .ico obrázky, čo je závislosť imageio-bmp, spolu so závislosťou imageio-core:

 com.twelvemonkeys.imageio imageio-bmp 3.3.2 com.twelvemonkeys.imageio imageio-core 3.3.2 

A toto je všetko! Zabudovaný ImageIO Java API načítava doplnky automaticky za behu. Teraz bude náš projekt fungovať .ico obrázky tiež.

6. Zhrnutie

Boli ste predstavení v 4 knižniciach, ktoré vám môžu pomôcť pri práci s obrázkami. Ak pôjdete ďalej, mali by ste hľadať niektoré algoritmy spracovania obrazu, napríklad extrakciu okrajov, zvýšenie kontrastu, použitie filtrov alebo detekciu tváre.

Na tieto účely by mohlo byť lepšie začať sa učiť ImageJ alebo OpenIMAJ. Oba sa dajú ľahko zahrnúť do projektu a pokiaľ ide o spracovanie obrazu, sú oveľa výkonnejšie ako AWT.

Tieto príklady spracovania obrázkov nájdete v projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found