OpenCV & Java Pavel Jetenský

Podobné dokumenty
Gradle.

Text úlohy. Vyberte jednu z nabízených možností:






Zobrazování barev Josef Pelikán CGG MFF UK Praha.

Generické programování

Práce se soubory v Javě

Kolekce, cyklus foreach

FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ KYBERNETIKA, AUTOMATIZACE A MĚŘENÍ. MRBT Projekt

Typický prvek kolekce pro české řazení

Java - výjimky. private void vstup() throws IOException {... }

Základy jazyka C# Obsah přednášky. Architektura.NET Historie Vlastnosti jazyka C# Datové typy Příkazy Prostory jmen Třídy, rozhraní

Novinky v IBM Notes a Domino. CubeTeam Dan Vrána

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Semestrální projekt. Předmět: Programování v jazyce C. Zadání: Operace s maticemi. Uživatelský manuál. ver. 1.0

Správa paměti. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta, 2016

Úvod do programování - Java. Cvičení č.4

Teoretické minimum z PJV

Knihovna pro automatickou detekci a měření objektů v obrazu z mikroskopu

Úvod do programování v jazyce Java

Projekty pro výuku programování v jazyce Java

Textové soubory. alg9 1

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Jazyk C# (seminář 3)

Java a XML. 10/26/09 1/7 Java a XML

1. Téma 12 - Textové soubory a výjimky

8 Třídy, objekty, metody, předávání argumentů metod

Java - řazení objektů

III/ 2 Inovace a zkvalitnění výuky prostřednictvím ICT

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

RMI Remote Method Invocation

Soubor jako posloupnost bytů

Vytváření a použití knihoven tříd

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Abstraktní datové typy: zásobník

Pokročilé programování v jazyce C pro chemiky (C3220) Statické proměnné a metody, šablony v C++

ANT. Aplikační programování v Javě (BI-APJ) - 1 Ing. Jiří Daněček Katedra softwarového inženýrství Fakulta informačních technologií ČVUT Praha

Výčtový typ strana 67

Java Cvičení 05. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Generické typy. Podrobněji: The Java Language Specification ( Third Edition ) , 18

DUM 01 téma: Úvod do počítačové grafiky

KTE / ZPE Informační technologie

NetBeans platforma. Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

boolean hasnext() Object next() void remove() Kolekce

Programovací jazyk Java

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

8. přednáška: Soubory a proudy

Jazyk C++ I. Šablony 2

3 KTE / ZPE Informační technologie


Enterprise Java (BI-EJA) Technologie programování v jazyku Java (X36TJV)

Práce na počítači. Bc. Veronika Tomsová

Návod pro práci s SPSS

Stromy. Karel Richta a kol. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze Karel Richta a kol.

Při studiu tohoto bloku se předpokládá, že student je zvládá základy programování v jazyce Java s využitím vývojového prostředí NetBeans.

Algoritmizace a programování

C# konzole Program emoce

Programování v Javě I. Únor 2009

Konvertor SK-1402 video/usb. Návod k obsluze

Postřehová hra. Zadání projektu. 1 Moje cíle

IUJCE 07/08 Přednáška č. 1

Stromy. Příklady. Rekurzivní datové struktury. Základní pojmy

Struktura třídy, operátory, jednoduché algoritmy, junit. Programování II 2. cvičení Alena Buchalcevová

Java - Kresba. 2/28/11 1/8 Java - kresba

III/2 Inovace a zkvalitnění výuky prostřednictvím ICT

Programování v Javě I. Leden 2008

Java Cvičení 01. CHARLES UNIVERSITY IN PRAGUE faculty of mathematics and physics

Pokud zadání nerozumíte nebo se vám zdá nejednoznačné, zeptejte se. Pište čitelně, nečitelná řešení nebudeme uznávat.

Java Enum Java, zimní semestr ,2017 1

ALGORITMIZACE 2010/03 STROMY, BINÁRNÍ STROMY VZTAH STROMŮ A REKURZE ZÁSOBNÍK IMPLEMENTUJE REKURZI PROHLEDÁVÁNÍ S NÁVRATEM (BACKTRACK)

Podmínky na zápočet. Java, zimní semestr

Třetí skupina zadání projektů do předmětu Algoritmy II, letní semestr 2017/2018

1.0 Lekce 1: Seznámení s prostøedím. 2.0 Lekce 2: Základní opravy fotografie

IAJCE Přednáška č. 6. logický celek, řešící dílčí část problému Příklad velmi špatného zápisu programu na výpočet obsahu obdélníku

IRAE 07/08 Přednáška č. 2. atr1 atr2. atr1 atr2 -33

Seznamy a iterátory. Kolekce obecně. Rozhraní kolekce. Procházení kolekcí

Tablexia. Vývoj multiplatformních her pomocí opensource technologie libgdx. Matyáš Latner

Text úlohy. Kolik je automaticky generovaných barev ve standardní paletě 3-3-2?

Principy operačních systémů. Lekce 7: Souborový systém

Algoritmizace. Cíle předmětu

Java testovací třída

IRAE 07/08 Přednáška č. 1

1. Programování proti rozhraní

IAJCE Přednáška č. 8. double tprumer = (t1 + t2 + t3 + t4 + t5 + t6 + t7) / 7; Console.Write("\nPrumerna teplota je {0}", tprumer);

Fergusnova kubika, která je definována pomocí bodu P1, vektoru P1P2, bodu P3 a vektoru P3P4

3. přednáška. Obsah: Řídící struktury sekvence, if-else, switch, for, while, do-while. Zpracování posloupnosti

KMI / TMA Tvorba mobilních aplikací

C# - I/O, streamy, práce se soubory

Klepnutím lze upravit styl předlohy. nadpisů. nadpisů.

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Rastrový obraz Barevný prostor a paleta Zmenšení barevného prostoru Základní rastrové formáty

Fronta (Queue) Úvod do programování. Fronta implementace. Fronta implementace pomocí pole 1/4. Fronta implementace pomocí pole 3/4

Text úlohy. Která barva nepatří do základních barev prostoru RGB? Vyberte jednu z nabízených možností: a. Černá b. Červená c. Modrá d.

Jazyk C# (seminář 5)

int t1, t2, t3, t4, t5, t6, t7, prumer; t1=sys.readint();... t7=sys.readint(); prume pru r = r = ( 1+t 1+t t3+ t3+ t4 t5+ t5+ +t7 +t7 )/ ;

Transkript:

OpenCV & Java Pavel Jetenský www.upce.cz www.hooyu.com

Co nás čeká K-means algoritmus Cvičení Instalace OpenCV pro Javu Základní práce s obrazem read, write, show Background substraction Pomocí edge detection Pomocí thresholding Pomocí K-means clustering

Cvičení Instalace OpenCV pro Javu Základní práce s obrazem read, write, show Background substraction Pomocí edge detection Pomocí thresholding Pomocí K-means clustering

Co vás zajímá? Programátorské tipy pro práci s: IntelliJ ideou Verzovacím systémem GIT Buildovacím systémem Gradle

K-Means clustering: v8 K = 3

K-Means: vstup N d-dimenzionálních vektorů k počet klusterů

K-Means: výstup Centers: d-dimenzionální středy clusterů (k) Minimalizované vzdáleností bodů od středů vektorů Klustery vytvoří voronoivy regiony Labels: Příslušnost vektorů ke klusterům

K-Means: použití Geografická data (2D,3D) Statistická n-rozměrná data (n-d) Color quantization (HSV, LAB)

K-Means: použití Navrhněte umístění 3 skladů pro existující prodejny

K-Means: použití Roztřiďte pixely do 3 skupin stejné barvy (RGB, HSV, LAB)

K-Means: color quantisation

K-Means: v9 Mat samples32f = new Mat(); Mat allpixelsinonerow = sourceimg.reshape(1, sourceimg.cols() * sourceimg.rows()); allpixelsinonerow.convertto(samples32f, CvType.CV_32F, 1.0 / 255.0); TermCriteria criteria = new TermCriteria(TermCriteria.COUNT, 100, 1); Mat labels = new Mat(sourceImg.width()*sourceImg.height(), 1, CvType.CV_32SC1); labels.setto(new Scalar(0)); Mat centers = new Mat(); Core.kmeans(samples32f, k, labels, criteria, 1, Core.KMEANS_PP_CENTERS + Core.KMEANS_USE_INITIAL_LABELS, centers);

K-Means : v9

Instalace OpenCV pro Javu Opencv.org - release 3.3.1 Opencv-331.jar Windows opencv_java331.dll Unix libopencv_java320.so libraries cmake

GITHUB https://github.com/jetycz/javadays2017.git v0 empty gradle & groovy project v1 v2 v3...

Instalace OpenCV pro Javu: v1 build.gradle compile files('/usr/share/opencv/java/opencv-320.jar') Loading library System.load("/usr/share/OpenCV/java/libopencv_java320.so");

Základní práce s obrazem: v2 Imgcodecs.imwrite("/tmp/a.png", mat); Mat mat = Imgcodecs.imread("/tmp/a.png");

Zobrazení v jframe: v3 JFrame jframe = new JFrame(); jframe.settitle("image " + mat.size()); jframe.setdefaultcloseoperation(windowconstants.dispose_on_close); jframe.setsize(new Dimension(mat.width(), mat.height())); int type = (mat.channels()==1)? BufferedImage.TYPE_BYTE_GRAY : BufferedImage.TYPE_3BYTE_BGR; BufferedImage bufferedimage = new BufferedImage(mat.width(), mat.height(), type); DataBufferByte databuffer = (DataBufferByte) bufferedimage.getraster().getdatabuffer(); byte[] data = databuffer.getdata(); mat.get(0,0,data); jframe.getcontentpane().add(new JLabel(new ImageIcon(bufferedImage))); jframe.setvisible(true);

Canny edge detection: v3

Canny edge detection: v3 Mat canny = new Mat(); double mean = Core.mean(sample).val[0]; double threshold1meanpercentage = 0.3; double threshold2meanpercentage = 3*threshold1MeanPercentage; Imgproc.Canny(sample, canny, threshold1meanpercentage * mean, threshold2meanpercentage * mean, 3, true);

Blob detection: v4

Blob detection: v4 List<MatOfPoint> contours = new ArrayList<>(); Mat hierarchy = new Mat(); Imgproc.findContours(dilated, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);

Dilate: v4

Blob detection: v4 List<MatOfPoint> contours = new ArrayList<>(); Mat hierarchy = new Mat(); Imgproc.findContours(dilated, contours, hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);

Background mask: v5

Background mask: v5 sample.setto(new Scalar(0,0,0), foregroundmask);

HSV Color model - V : v6

HSV Color model - S : v6

Thresholding : v7 HSV: Value = 80-255

Thresholding : v7 Core.inRange( img.getmat(), lowerboundary, upperboundary, destination);

OCR tesseract : v10 UK jety@jety-17:~$ tesseract /tmp/a.png stdout UK

Memory Mat mat = new Mat(); DO WORK mat.release(); public static void releasemats(mat... mats) { for (Mat mat : mats) { if (mat!=null) mat.release(); } }

OCR tesseract : v10 UK jety@jety-17:~$ tesseract /tmp/a.png stdout UK

Memory Mat mat = new Mat(); DO WORK mat.release(); public static void releasemats(mat... mats) { for (Mat mat : mats) { if (mat!=null) mat.release(); } }

Děkuji za pozornost. Otázky? www.javadays.cz www.gopas.cz