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 -