OpenCV - przechowywanie obrazów
Do przechwytywania obrazu używamy urządzeń takich jak aparaty i skanery. Urządzenia te rejestrują wartości liczbowe obrazu (np. Wartości pikseli). OpenCV to biblioteka przetwarzająca obrazy cyfrowe, dlatego musimy przechowywać te obrazy do przetwarzania.
Plik Matklasa biblioteki OpenCV służy do przechowywania wartości obrazu. Reprezentuje n-wymiarową tablicę i służy do przechowywania danych obrazu w skali szarości lub kolorowych obrazów, objętości wokseli, pól wektorowych, chmur punktów, tensorów, histogramów itp.
Ta klasa składa się z dwóch części danych: header i a pointer
Header - Zawiera informacje takie jak rozmiar, metoda użyta do przechowywania i adres macierzy (stały rozmiar).
Pointer - Przechowuje wartości pikseli obrazu (zmienia się).
Klasa Mat
Biblioteka OpenCV Java udostępnia tę klasę o tej samej nazwie (Mat) w pakiecie org.opencv.core.
Konstruktorzy
Klasa Mat biblioteki OpenCV Java ma różne konstruktory, za pomocą których można skonstruować obiekt Mat.
S.No | Konstruktorzy i opis |
---|---|
1 |
Mat() W większości przypadków jest to domyślny konstruktor bez parametrów. Używamy tego do konstruktora, aby utworzyć pustą macierz i przekazać ją do innych metod OpenCV. |
2 |
Mat(int rows, int cols, int type) Ten konstruktor akceptuje trzy parametry typu całkowitego reprezentujące liczbę wierszy i kolumn w tablicy 2D oraz typ tablicy (która ma być używana do przechowywania danych). |
3 |
Mat(int rows, int cols, int type, Scalar s) Uwzględniając parametry poprzedniego, konstruktor ten dodatkowo przyjmuje jako parametr obiekt klasy Scalar. |
4 |
Mat(Size size, int type) Ten konstruktor przyjmuje dwa parametry, obiekt reprezentujący rozmiar macierzy i liczbę całkowitą reprezentującą typ tablicy używanej do przechowywania danych. |
5 |
Mat(Size size, int type, Scalar s) Uwzględniając parametry poprzedniego, konstruktor ten dodatkowo przyjmuje jako parametr obiekt klasy Scalar. |
6 | Mat(long addr) |
7 |
Mat(Mat m, Range rowRange) Ten konstruktor akceptuje obiekt innej macierzy i obiekt klasy Range reprezentujący zakres wierszy, które mają być użyte do utworzenia nowej macierzy. |
8 |
Mat(Mat m, Range rowRange, Range colRange) Uwzględniając parametry poprzedniego, konstruktor ten dodatkowo akceptuje obiekt klasy. Zakres reprezentujący zakres kolumn. |
9 |
Mat(Mat m, Rect roi) Ten konstruktor akceptuje dwa obiekty, jeden reprezentujący inną macierz, a drugi reprezentujący Region Ofa Interest. |
Note -
Typ tablicy. Użyj CV_8UC1, ..., CV_64FC4 do tworzenia macierzy 1-4 kanałów lub CV_8UC (n), ..., CV_64FC (n) do tworzenia macierzy wielokanałowych (do kanałów CV_CN_MAX).
Typy macierzy były reprezentowane przez różne pola klasy CvType który należy do pakietu org.opencv.core.
Metody i opis
Poniżej przedstawiono niektóre metody dostarczane przez klasę Mat.
S.No | Metody i opis |
---|---|
1 |
Mat col(int x) Ta metoda akceptuje parametr będący liczbą całkowitą reprezentującą indeks kolumny oraz pobiera i zwraca tę kolumnę. |
2 |
Mat row(int y) Ta metoda akceptuje parametr będący liczbą całkowitą reprezentującą indeks wiersza oraz pobiera i zwraca ten wiersz. |
3 |
int cols() Ta metoda zwraca liczbę kolumn w macierzy. |
4 |
int rows() Ta metoda zwraca liczbę wierszy w macierzy. |
5 |
Mat setTo(Mat value) Ta metoda akceptuje obiekt klasy Mat type i ustawia elementy tablicy na określoną wartość. |
6 |
Mat setTo(Scalar s) Ta metoda akceptuje obiekt klasy Scalar type i ustawia elementy tablicy na określoną wartość. |
Tworzenie i wyświetlanie macierzy
W tej sekcji omówimy nasz pierwszy przykład OpenCV. Zobaczymy, jak stworzyć i wyświetlić prostą macierz OpenCV.
Poniżej podano kroki, które należy wykonać, aby utworzyć i wyświetlić macierz w OpenCV.
Krok 1: Załaduj natywną bibliotekę OpenCV
Podczas pisania kodu Java przy użyciu biblioteki OpenCV, pierwszym krokiem, jaki należy wykonać, jest załadowanie natywnej biblioteki OpenCV za pomocą loadLibrary(). Załaduj natywną bibliotekę OpenCV, jak pokazano poniżej.
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Krok 2: Utwórz instancję klasy Mat
Utwórz instancję klasy Mat, używając dowolnej funkcji wspomnianej wcześniej w tym rozdziale.
//Creating a matrix
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
Krok 3: Wypełnij macierz za pomocą metod
Możesz pobrać określone wiersze / kolumny macierzy, przekazując wartości indeksu do metod row()/col().
I możesz ustawić wartości dla tych przy użyciu dowolnego z wariantów setTo() metody.
//Retrieving the row with index 0
Mat row0 = matrix.row(0);
//setting values of all elements in the row with index 0
row0.setTo(new Scalar(1));
//Retrieving the row with index 3
Mat col3 = matrix.col(3);
//setting values of all elements in the row with index 3
col3.setTo(new Scalar(3));
Example
Możesz użyć następującego kodu programu, aby utworzyć i wyświetlić prostą macierz w Javie przy użyciu biblioteki OpenCV.
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.CvType;
import org.opencv.core.Scalar;
class DisplayingMatrix {
public static void main(String[] args) {
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
//Creating a matrix
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
//Retrieving the row with index 0
Mat row0 = matrix.row(0);
//setting values of all elements in the row with index 0
row0.setTo(new Scalar(1));
//Retrieving the row with index 3
Mat col3 = matrix.col(3);
//setting values of all elements in the row with index 3
col3.setTo(new Scalar(3));
//Printing the matrix
System.out.println("OpenCV Mat data:\n" + matrix.dump());
}
}
Wykonując powyższy program, otrzymasz następujące dane wyjściowe -
OpenCV Mat data:
[ 1, 1, 1, 3, 1;
0, 0, 0, 3, 0;
0, 0, 0, 3, 0;
0, 0, 0, 3, 0;
0, 0, 0, 3, 0]
Ładowanie obrazu za pomocą JavaSE API
Plik BufferedImage klasa java.awt.image.BufferedImage pakiet służy do przechowywania obrazu i pliku ImageIO klasa pakietu import javax.imageio zapewnia metody odczytu i zapisu Images.
Example
Możesz użyć następującego kodu programu do ładowania i zapisywania obrazów za pomocą biblioteki JavaSE.
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class LoadingImage_JSE_library {
public static void main( String[] args ) throws IOException {
//Input File
File input = new File("C:/EXAMPLES/OpenCV/sample.jpg");
//Reading the image
BufferedImage image = ImageIO.read(input);
//Saving the image with a different name
File ouptut = new File("C:/OpenCV/sample.jpg");
ImageIO.write(image, "jpg", ouptut);
System.out.println("image Saved");
}
}
Wykonując powyższy program, otrzymasz następujące dane wyjściowe -
image Saved
Jeśli otworzysz określoną ścieżkę, możesz obserwować zapisany obraz w następujący sposób -