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Если вы откроете указанный путь, вы можете увидеть сохраненное изображение следующим образом:
