OpenCV - Menyimpan Gambar

Untuk mengambil gambar, kami menggunakan perangkat seperti kamera dan pemindai. Perangkat ini merekam nilai numerik gambar (Mis: nilai piksel). OpenCV adalah library yang memproses gambar digital, oleh karena itu kita perlu menyimpan gambar tersebut untuk diproses.

Itu Matkelas perpustakaan OpenCV digunakan untuk menyimpan nilai-nilai gambar. Ini mewakili larik n-dimensi dan digunakan untuk menyimpan data gambar grayscale atau gambar berwarna, volume voxel, bidang vektor, point cloud, tensor, histogram, dll.

Kelas ini terdiri dari dua bagian data: the header dan a pointer

  • Header - Berisi informasi seperti ukuran, metode yang digunakan untuk menyimpan, dan alamat matriks (ukuran konstan).

  • Pointer - Menyimpan nilai piksel gambar (Terus bervariasi).

Kelas Mat

Pustaka OpenCV Java menyediakan kelas ini dengan nama yang sama (Mat) di dalam paket org.opencv.core.

Konstruktor

Kelas Mat pustaka Java OpenCV memiliki berbagai konstruktor, yang dengannya Anda dapat membuat objek Mat.

S.No Pembangun dan Deskripsi
1

Mat()

Ini adalah konstruktor default tanpa parameter dalam banyak kasus. Kami menggunakan ini untuk konstruktor untuk membuat matriks kosong dan meneruskannya ke metode OpenCV lainnya.

2

Mat(int rows, int cols, int type)

Konstruktor ini menerima tiga parameter tipe bilangan bulat yang mewakili jumlah baris dan kolom dalam larik 2D dan jenis larik (yang akan digunakan untuk menyimpan data).

3

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

Termasuk parameter yang sebelumnya, konstruktor ini juga menerima objek dari kelas Scalar sebagai parameter.

4

Mat(Size size, int type)

Konstruktor ini menerima dua parameter, objek yang mewakili ukuran matriks dan bilangan bulat yang mewakili tipe larik yang digunakan untuk menyimpan data.

5

Mat(Size size, int type, Scalar s)

Termasuk parameter yang sebelumnya, konstruktor ini juga menerima objek dari kelas Scalar sebagai parameter.

6

Mat(long addr)

7

Mat(Mat m, Range rowRange)

Konstruktor ini menerima objek matriks lain dan objek kelas Rentang yang mewakili rentang baris yang akan diambil untuk membuat matriks baru.

8

Mat(Mat m, Range rowRange, Range colRange)

Termasuk parameter dari yang sebelumnya, konstruktor ini juga menerima objek dari kelas. Rentang mewakili rentang kolom.

9

Mat(Mat m, Rect roi)

Konstruktor ini menerima dua objek, satu mewakili matriks lain dan yang lainnya mewakili Region Of Interest.

Note -

  • Jenis array. Gunakan CV_8UC1, ..., CV_64FC4 untuk membuat 1-4 matriks saluran, atau CV_8UC (n), ..., CV_64FC (n) untuk membuat matriks multi-saluran (hingga saluran CV_CN_MAX).

  • Jenis matriks diwakili oleh berbagai bidang kelas CvType yang termasuk dalam paket org.opencv.core.

Metode dan Deskripsi

Berikut adalah beberapa metode yang disediakan oleh kelas Mat.

S.No Metode dan Deskripsi
1

Mat col(int x)

Metode ini menerima parameter integer yang mewakili indeks kolom dan mengambil dan mengembalikan kolom itu.

2

Mat row(int y)

Metode ini menerima parameter integer yang mewakili indeks suatu baris dan mengambil serta mengembalikan baris tersebut.

3

int cols()

Metode ini mengembalikan jumlah kolom dalam matriks.

4

int rows()

Metode ini mengembalikan jumlah baris dalam matriks.

5

Mat setTo(Mat value)

Metode ini menerima objek dari Mat ketik dan setel elemen array ke nilai yang ditentukan.

6

Mat setTo(Scalar s)

Metode ini menerima objek dari Scalar ketik dan setel elemen array ke nilai yang ditentukan.

Membuat dan Menampilkan Matriks

Pada bagian ini, kita akan membahas contoh OpenCV pertama kita. Kita akan melihat bagaimana membuat dan menampilkan matriks OpenCV sederhana.

Diberikan di bawah ini adalah langkah-langkah yang harus diikuti untuk membuat dan menampilkan matriks di OpenCV.

Langkah 1: Muat pustaka asli OpenCV

Saat menulis kode Java menggunakan pustaka OpenCV, langkah pertama yang perlu Anda lakukan adalah memuat pustaka asli OpenCV menggunakan loadLibrary(). Muat pustaka asli OpenCV seperti yang ditunjukkan di bawah ini.

//Loading the core library 
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);

Langkah 2: Buat instance kelas Mat

Buat instance kelas Mat menggunakan salah satu fungsi yang disebutkan di bab ini sebelumnya.

//Creating a matrix 
Mat matrix = new Mat(5, 5, CvType.CV_8UC1, new Scalar(0));

Langkah 3: Isi matriks menggunakan metode

Anda dapat mengambil baris / kolom tertentu dari sebuah matriks dengan meneruskan nilai indeks ke metode row()/col().

Dan, Anda dapat menyetel nilai ke nilai ini menggunakan salah satu varian dari setTo() metode.

//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

Anda dapat menggunakan kode program berikut untuk membuat dan menampilkan matriks sederhana di Java menggunakan pustaka 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()); 
   } 
}

Saat menjalankan program di atas, Anda akan mendapatkan output berikut -

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]

Memuat Gambar menggunakan JavaSE API

Itu BufferedImage kelas dari java.awt.image.BufferedImage paket digunakan untuk menyimpan gambar dan file ImageIO kelas paket import javax.imageio menyediakan metode untuk membaca dan menulis Gambar.

Example

Anda dapat menggunakan kode program berikut untuk memuat dan menyimpan gambar menggunakan pustaka 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");
   } 
}

Saat menjalankan program di atas, Anda akan mendapatkan output berikut -

image Saved

Jika Anda membuka jalur yang ditentukan, Anda dapat mengamati gambar yang disimpan sebagai berikut -