Учебники

OpenCV — Хранение изображений

Для захвата изображения мы используем такие устройства, как камеры и сканеры. Эти устройства записывают числовые значения изображения (например, значения в пикселях). OpenCV — это библиотека, которая обрабатывает цифровые изображения, поэтому нам нужно хранить эти изображения для обработки.

Класс Mat библиотеки OpenCV используется для хранения значений изображения. Он представляет собой n-мерный массив и используется для хранения данных изображения в градациях серого или цветных изображений, объемов вокселей, векторных полей, облаков точек, тензоров, гистограмм и т. Д.

Этот класс состоит из двух частей данных: заголовок и указатель

  • Заголовок — содержит информацию, такую ​​как размер, метод, используемый для хранения, и адрес матрицы (постоянный по размеру).

  • Указатель — хранит значения пикселей изображения (сохраняет при изменении).

Заголовок — содержит информацию, такую ​​как размер, метод, используемый для хранения, и адрес матрицы (постоянный по размеру).

Указатель — хранит значения пикселей изображения (сохраняет при изменении).

Класс Мат

Java-библиотека OpenCV предоставляет этот класс с тем же именем ( Mat ) в пакете org.opencv.core .

Конструкторы

Класс Mat библиотеки Java OpenCV имеет различные конструкторы, с помощью которых вы можете создавать объекты Mat.

S.No Конструкторы и описание
1

Мат()

Это конструктор по умолчанию, в большинстве случаев без параметров. Мы используем это для конструктора, чтобы создать пустую матрицу и передать это другим методам OpenCV.

2

Mat (int row, int cols, int type)

Этот конструктор принимает три параметра целочисленного типа, представляющих количество строк и столбцов в двумерном массиве и тип массива (который должен использоваться для хранения данных).

3

Mat (int row, int cols, int type, Scalar s)

Включая параметры предыдущего, этот конструктор дополнительно принимает объект класса Scalar в качестве параметра.

4

Мат (размер размер, тип int)

Этот конструктор принимает два параметра: объект, представляющий размер матрицы, и целое число, представляющее тип массива, используемого для хранения данных.

5

Мат (размер размер, тип int, скаляр s)

Включая параметры предыдущего, этот конструктор дополнительно принимает объект класса Scalar в качестве параметра.

6

Mat (длинный адрес)

7

Мат (Mat m, Range rowRange)

Этот конструктор принимает объект другой матрицы и объект класса Range, представляющий диапазон строк, которые будут взяты для создания новой матрицы.

8

Mat (Mat m, Range rowRange, Range colRange)

Включая параметры предыдущего, этот конструктор дополнительно принимает объект класса. Диапазон, представляющий диапазон столбца.

9

Мат (Mat m, Rect roi)

Этот конструктор принимает два объекта, один представляет другую матрицу, а другой представляет область интереса.

Мат()

Это конструктор по умолчанию, в большинстве случаев без параметров. Мы используем это для конструктора, чтобы создать пустую матрицу и передать это другим методам OpenCV.

Mat (int row, int cols, int type)

Этот конструктор принимает три параметра целочисленного типа, представляющих количество строк и столбцов в двумерном массиве и тип массива (который должен использоваться для хранения данных).

Mat (int row, int cols, int type, Scalar s)

Включая параметры предыдущего, этот конструктор дополнительно принимает объект класса Scalar в качестве параметра.

Мат (размер размер, тип int)

Этот конструктор принимает два параметра: объект, представляющий размер матрицы, и целое число, представляющее тип массива, используемого для хранения данных.

Мат (размер размер, тип int, скаляр s)

Включая параметры предыдущего, этот конструктор дополнительно принимает объект класса Scalar в качестве параметра.

Mat (длинный адрес)

Мат (Mat m, Range rowRange)

Этот конструктор принимает объект другой матрицы и объект класса Range, представляющий диапазон строк, которые будут взяты для создания новой матрицы.

Mat (Mat m, Range rowRange, Range colRange)

Включая параметры предыдущего, этот конструктор дополнительно принимает объект класса. Диапазон, представляющий диапазон столбца.

Мат (Mat m, Rect roi)

Этот конструктор принимает два объекта, один представляет другую матрицу, а другой представляет область интереса.

Примечание

  • Тип массива. Используйте CV_8UC1, …, CV_64FC4 для создания 1-4 канальных матриц или CV_8UC (n), …, CV_64FC (n) для создания многоканальных (до каналов CV_CN_MAX) матриц.

  • Тип матриц был представлен различными полями класса CvType, который принадлежит пакету org.opencv.core .

Тип массива. Используйте CV_8UC1, …, CV_64FC4 для создания 1-4 канальных матриц или CV_8UC (n), …, CV_64FC (n) для создания многоканальных (до каналов CV_CN_MAX) матриц.

Тип матриц был представлен различными полями класса CvType, который принадлежит пакету org.opencv.core .

Методы и описание

Ниже приведены некоторые методы класса Mat.

S.No Методы и описание
1

Циновка (int x)

Этот метод принимает целочисленный параметр, представляющий индекс столбца, а также извлекает и возвращает этот столбец.

2

Мат ряд (int y)

Этот метод принимает целочисленный параметр, представляющий индекс строки, и извлекает и возвращает эту строку.

3

int cols ()

Этот метод возвращает количество столбцов в матрице.

4

int row ()

Этот метод возвращает количество строк в матрице.

5

Mat setTo (значение Mat)

Этот метод принимает объект типа Mat и устанавливает элементы массива в указанное значение.

6

Коврик SetTo (Скалярные s)

Этот метод принимает объект типа Scalar и устанавливает элементы массива в указанное значение.

Циновка (int x)

Этот метод принимает целочисленный параметр, представляющий индекс столбца, а также извлекает и возвращает этот столбец.

Мат ряд (int y)

Этот метод принимает целочисленный параметр, представляющий индекс строки, и извлекает и возвращает эту строку.

int cols ()

Этот метод возвращает количество столбцов в матрице.

int row ()

Этот метод возвращает количество строк в матрице.

Mat setTo (значение Mat)

Этот метод принимает объект типа Mat и устанавливает элементы массива в указанное значение.

Коврик SetTo (Скалярные s)

Этот метод принимает объект типа Scalar и устанавливает элементы массива в указанное значение.

Создание и отображение матрицы

В этом разделе мы собираемся обсудить наш первый пример 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));

пример

Вы можете использовать следующий программный код для создания и отображения простой матрицы в 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 предоставляет методы для чтения и записи изображений.

пример

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

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