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

Если вы откроете указанный путь, вы можете увидеть сохраненное изображение следующим образом: