OpenCV - Хранение изображений
Для захвата изображения мы используем такие устройства, как камеры и сканеры. Эти устройства записывают числовые значения изображения (например, значения пикселей). OpenCV - это библиотека, которая обрабатывает цифровые изображения, поэтому нам необходимо хранить эти изображения для обработки.
В MatКласс библиотеки OpenCV используется для хранения значений изображения. Он представляет собой n-мерный массив и используется для хранения данных изображения в оттенках серого или цветных изображений, объемов вокселей, векторных полей, облаков точек, тензоров, гистограмм и т. Д.
Этот класс состоит из двух частей данных: header и pointer
Header - Содержит такую информацию, как размер, метод, используемый для хранения, и адрес матрицы (постоянный размер).
Pointer - Сохраняет значения пикселей изображения (продолжает меняться).
Мат Класс
Библиотека OpenCV Java предоставляет этому классу то же имя (Mat) внутри пакета org.opencv.core.
Конструкторы
Класс Mat библиотеки OpenCV Java имеет различные конструкторы, с помощью которых вы можете создать объект Mat.
S.No | Конструкторы и описание |
---|---|
1 | Mat() В большинстве случаев это конструктор по умолчанию без параметров. Мы используем это в конструкторе, чтобы создать пустую матрицу и передать ее другим методам OpenCV. |
2 | Mat(int rows, int cols, int type) Этот конструктор принимает три параметра целочисленного типа, представляющих количество строк и столбцов в 2D-массиве и тип массива (который будет использоваться для хранения данных). |
3 | Mat(int rows, int cols, int type, Scalar s) Включая параметры предыдущего, этот конструктор дополнительно принимает в качестве параметра объект класса Scalar. |
4 | Mat(Size size, int type) Этот конструктор принимает два параметра: объект, представляющий размер матрицы, и целое число, представляющее тип массива, используемого для хранения данных. |
5 | Mat(Size size, int type, Scalar s) Включая параметры предыдущего, этот конструктор дополнительно принимает в качестве параметра объект класса Scalar. |
6 | Mat(long addr) |
7 | Mat(Mat m, Range rowRange) Этот конструктор принимает объект другой матрицы и объект класса Range, представляющий диапазон строк, которые должны быть взяты для создания новой матрицы. |
8 | Mat(Mat m, Range rowRange, Range colRange) Включая параметры предыдущего, этот конструктор дополнительно принимает объект класса. Диапазон, представляющий диапазон столбца. |
9 | Mat(Mat m, Rect roi) Этот конструктор принимает два объекта, один из которых представляет другую матрицу, а другой - RЭгион Oж Iинтерес. |
Note -
Тип массива. Используйте CV_8UC1, ..., CV_64FC4 для создания матриц 1–4 каналов или CV_8UC (n), ..., CV_64FC (n) для создания многоканальных (до каналов CV_CN_MAX) матриц.
Типы матриц представляли различные поля класса CvType который принадлежит пакету org.opencv.core.
Методы и описание
Ниже приведены некоторые методы, предоставляемые классом Mat.
S.No | Методы и описание |
---|---|
1 | Mat col(int x) Этот метод принимает целочисленный параметр, представляющий индекс столбца, и извлекает и возвращает этот столбец. |
2 | Mat row(int y) Этот метод принимает целочисленный параметр, представляющий индекс строки, и извлекает и возвращает эту строку. |
3 | int cols() Этот метод возвращает количество столбцов в матрице. |
4 | int rows() Этот метод возвращает количество строк в матрице. |
5 | Mat setTo(Mat value) Этот метод принимает объект Mat type и устанавливает элементы массива в указанное значение. |
6 | Mat setTo(Scalar s) Этот метод принимает объект Scalar type и устанавливает элементы массива в указанное значение. |
Создание и отображение матрицы
В этом разделе мы собираемся обсудить наш первый пример OpenCV. Мы увидим, как создать и отобразить простую матрицу OpenCV.
Ниже приведены шаги, которые необходимо выполнить для создания и отображения матрицы в OpenCV.
Шаг 1. Загрузите собственную библиотеку OpenCV
При написании кода Java с использованием библиотеки OpenCV первый шаг, который вам нужно сделать, - это загрузить собственную библиотеку OpenCV с помощью loadLibrary(). Загрузите собственную библиотеку OpenCV, как показано ниже.
//Loading the core library
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Шаг 2. Создайте экземпляр класса Mat
Создайте экземпляр класса Mat, используя любую из функций, упомянутых в этой главе ранее.
//Creating a matrix
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));
Шаг 3: Заполните матрицу методами
Вы можете получить определенные строки / столбцы матрицы, передав значения индекса в методы row()/col().
И вы можете установить для них значения, используя любой из вариантов setTo() методы.
//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
Вы можете использовать следующий программный код для создания и отображения простой матрицы на Java с помощью библиотеки 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());
}
}
При выполнении вышеуказанной программы вы получите следующий результат -
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]
Загрузка изображения с помощью JavaSE API
В BufferedImage класс java.awt.image.BufferedImage пакет используется для хранения изображения и ImageIO класс пакета import javax.imageio предоставляет методы для чтения и записи изображений.
Example
Вы можете использовать следующий программный код для загрузки и сохранения изображений с помощью библиотеки 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");
}
}
При выполнении вышеуказанной программы вы получите следующий результат -
image Saved
Если вы откроете указанный путь, вы можете увидеть сохраненное изображение следующим образом: