OpenCV - Görüntüleri Saklama

Bir görüntüyü yakalamak için kamera ve tarayıcı gibi cihazlar kullanıyoruz. Bu cihazlar görüntünün sayısal değerlerini kaydeder (Örn: piksel değerleri). OpenCV, dijital görüntüleri işleyen bir kitaplıktır, bu nedenle bu görüntüleri işlemek için saklamamız gerekir.

MatOpenCV kütüphanesi sınıfı, bir görüntünün değerlerini depolamak için kullanılır. N boyutlu bir diziyi temsil eder ve gri tonlamalı veya renkli görüntülerin, voksel hacimlerinin, vektör alanlarının, nokta bulutlarının, tensörlerin, histogramların vb. Görüntü verilerini depolamak için kullanılır.

Bu sınıf iki veri bölümünden oluşur: header ve bir pointer

  • Header - Boyut, depolama için kullanılan yöntem ve matrisin adresi (boyut olarak sabit) gibi bilgileri içerir.

  • Pointer - Görüntünün piksel değerlerini depolar (Değişken kalır).

Mat Sınıfı

OpenCV Java kitaplığı bu sınıfa aynı adı verir (Mat) paket içinde org.opencv.core.

İnşaatçılar

OpenCV Java kitaplığının Mat sınıfı, Mat nesnesini oluşturabileceğiniz çeşitli oluşturuculara sahiptir.

S.No Oluşturucular ve Açıklama
1

Mat()

Bu, çoğu durumda parametre içermeyen varsayılan kurucudur. Bunu, boş bir matris oluşturmak ve bunu diğer OpenCV yöntemlerine aktarmak için yapıcı olarak kullanırız.

2

Mat(int rows, int cols, int type)

Bu yapıcı, bir 2D dizideki satır ve sütun sayısını ve dizinin türünü (yani verileri depolamak için kullanılacak) temsil eden üç tamsayı türü parametresini kabul eder.

3

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

Bir öncekinin parametrelerini de içeren bu yapıcı, ek olarak Scalar sınıfının bir nesnesini parametre olarak kabul eder.

4

Mat(Size size, int type)

Bu yapıcı, iki parametreyi kabul eder; matrisin boyutunu temsil eden bir nesne ve verileri depolamak için kullanılan dizinin türünü temsil eden bir tam sayı.

5

Mat(Size size, int type, Scalar s)

Bir öncekinin parametrelerini de içeren bu yapıcı, ek olarak Scalar sınıfının bir nesnesini parametre olarak kabul eder.

6

Mat(long addr)

7

Mat(Mat m, Range rowRange)

Bu yapıcı, başka bir matrisin bir nesnesini ve yeni bir matris oluşturmak için alınacak satırların aralığını temsil eden Range sınıfının bir nesnesini kabul eder.

8

Mat(Mat m, Range rowRange, Range colRange)

Bir öncekinin parametrelerini de içeren bu yapıcı, ek olarak sınıfın bir nesnesini de kabul eder. Sütun aralığını temsil eden aralık.

9

Mat(Mat m, Rect roi)

Bu kurucu, biri başka bir matrisi temsil eden ve diğeri de Region Of Iilgi.

Note -

  • Dizi türü. 1-4 kanal matrisleri oluşturmak için CV_8UC1, ..., CV_64FC4 veya çok kanallı (CV_CN_MAX kanala kadar) matrisler oluşturmak için CV_8UC (n), ..., CV_64FC (n) kullanın.

  • Matrislerin türü, sınıfın çeşitli alanları tarafından temsil edildi CvType hangisi pakete ait org.opencv.core.

Yöntemler ve Açıklama

Mat sınıfı tarafından sağlanan yöntemlerden bazıları aşağıdadır.

S.No Yöntemler ve Açıklama
1

Mat col(int x)

Bu yöntem, bir sütunun dizinini temsil eden bir tamsayı parametresini kabul eder ve bu sütunu alır ve döndürür.

2

Mat row(int y)

Bu yöntem, bir satırın dizinini temsil eden bir tamsayı parametresini kabul eder ve bu satırı alır ve döndürür.

3

int cols()

Bu yöntem, matristeki sütun sayısını döndürür.

4

int rows()

Bu yöntem, matristeki satır sayısını döndürür.

5

Mat setTo(Mat value)

Bu yöntem, bir nesneyi kabul eder. Mat yazın ve dizi öğelerini belirtilen değere ayarlar.

6

Mat setTo(Scalar s)

Bu yöntem, bir nesneyi kabul eder. Scalar yazın ve dizi öğelerini belirtilen değere ayarlar.

Matris Oluşturma ve Görüntüleme

Bu bölümde, ilk OpenCV örneğimizi tartışacağız. Basit bir OpenCV matrisinin nasıl oluşturulacağını ve görüntüleneceğini göreceğiz.

Aşağıda, OpenCV'de bir matris oluşturmak ve görüntülemek için izlenecek adımlar verilmiştir.

1. Adım: OpenCV yerel kitaplığını yükleyin

OpenCV kitaplığını kullanarak Java kodu yazarken yapmanız gereken ilk adım, OpenCV'nin yerel kitaplığını, loadLibrary(). OpenCV yerel kitaplığını aşağıda gösterildiği gibi yükleyin.

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

Adım 2: Mat sınıfını somutlaştırın

Bu bölümde daha önce bahsedilen işlevlerden herhangi birini kullanarak Mat sınıfını somutlaştırın.

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

3. Adım: Yöntemleri kullanarak matrisi doldurun

İndeks değerlerini yöntemlere ileterek bir matrisin belirli satırlarını / sütunlarını alabilirsiniz. row()/col().

Ve, bunların herhangi bir varyantını kullanarak bunlara değerler ayarlayabilirsiniz. setTo() yöntemler.

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

OpenCV kitaplığını kullanarak Java'da basit bir matris oluşturmak ve görüntülemek için aşağıdaki program kodunu kullanabilirsiniz.

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()); 
   } 
}

Yukarıdaki programı çalıştırırken aşağıdaki çıktıyı alacaksınız -

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 kullanarak Görüntü Yükleme

BufferedImage sınıfı java.awt.image.BufferedImage paketi bir görüntüyü saklamak için kullanılır ve ImageIO paketin sınıfı import javax.imageio Görüntüleri okumak ve yazmak için yöntemler sağlar.

Example

JavaSE kitaplığını kullanarak görüntüleri yüklemek ve kaydetmek için aşağıdaki program kodunu kullanabilirsiniz.

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");
   } 
}

Yukarıdaki programı çalıştırırken aşağıdaki çıktıyı alacaksınız -

image Saved

Belirtilen yolu açarsanız, kaydedilen görüntüyü aşağıdaki gibi gözlemleyebilirsiniz -