OpenCV - การจัดเก็บภาพ

ในการถ่ายภาพเราใช้อุปกรณ์เช่นกล้องถ่ายรูปและเครื่องสแกน อุปกรณ์เหล่านี้บันทึกค่าตัวเลขของภาพ (เช่นค่าพิกเซล) OpenCV เป็นไลบรารีที่ประมวลผลภาพดิจิทัลดังนั้นเราจึงจำเป็นต้องจัดเก็บภาพเหล่านี้เพื่อประมวลผล

Matคลาสของไลบรารี OpenCV ใช้เพื่อเก็บค่าของรูปภาพ มันแสดงถึงอาร์เรย์ n มิติและใช้ในการจัดเก็บข้อมูลภาพของภาพระดับสีเทาหรือสีปริมาตรของว็อกเซลฟิลด์เวกเตอร์เมฆจุดเทนเซอร์ฮิสโทแกรม ฯลฯ

คลาสนี้ประกอบด้วยข้อมูลสองส่วน: ส่วน header และก pointer

  • Header - มีข้อมูลเช่นขนาดวิธีที่ใช้ในการจัดเก็บและที่อยู่ของเมทริกซ์ (ขนาดคงที่)

  • Pointer - เก็บค่าพิกเซลของภาพ (เก็บไว้ที่แตกต่างกัน)

ชั้นเสื่อ

ไลบรารี OpenCV Java จัดเตรียมคลาสนี้ด้วยชื่อเดียวกัน (Mat) ภายในแพ็คเกจ org.opencv.core.

ตัวสร้าง

คลาส Mat ของไลบรารี OpenCV Java มีตัวสร้างหลายแบบซึ่งคุณสามารถสร้างวัตถุ Mat

ส. เลขที่ ตัวสร้างและคำอธิบาย
1

Mat()

นี่คือตัวสร้างเริ่มต้นที่ไม่มีพารามิเตอร์ในกรณีส่วนใหญ่ เราใช้สิ่งนี้เพื่อตัวสร้างเพื่อสร้างเมทริกซ์ว่างและส่งต่อไปยังเมธอด OpenCV อื่น ๆ

2

Mat(int rows, int cols, int type)

ตัวสร้างนี้ยอมรับสามพารามิเตอร์ของประเภทจำนวนเต็มซึ่งแสดงถึงจำนวนแถวและคอลัมน์ในอาร์เรย์ 2 มิติและประเภทของอาร์เรย์ (ซึ่งจะใช้ในการจัดเก็บข้อมูล)

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อีเจียน OInterest.

Note -

  • ประเภทอาร์เรย์ ใช้ CV_8UC1, ... , CV_64FC4 เพื่อสร้างเมทริกซ์ 1-4 แชนเนลหรือ CV_8UC (n), ... , CV_64FC (n) เพื่อสร้างเมทริกซ์แบบหลายแชนเนล (สูงสุด CV_CN_MAX แชนเนล)

  • ประเภทของเมทริกซ์แสดงโดยฟิลด์ต่างๆของคลาส CvType ซึ่งเป็นของแพ็คเกจ org.opencv.core.

วิธีการและคำอธิบาย

ต่อไปนี้เป็นวิธีการบางส่วนที่จัดเตรียมโดยคลาส Mat

ส. เลขที่ วิธีการและคำอธิบาย
1

Mat col(int x)

วิธีนี้ยอมรับพารามิเตอร์จำนวนเต็มแทนดัชนีของคอลัมน์และดึงข้อมูลและส่งคืนคอลัมน์นั้น

2

Mat row(int y)

วิธีนี้ยอมรับพารามิเตอร์จำนวนเต็มแทนดัชนีของแถวและดึงข้อมูลและส่งคืนแถวนั้น

3

int cols()

วิธีนี้ส่งกลับจำนวนคอลัมน์ในเมทริกซ์

4

int rows()

วิธีนี้จะส่งคืนจำนวนแถวในเมทริกซ์

5

Mat setTo(Mat value)

วิธีนี้ยอมรับวัตถุของ Mat พิมพ์และตั้งค่าองค์ประกอบอาร์เรย์เป็นค่าที่ระบุ

6

Mat setTo(Scalar 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));

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

หากคุณเปิดเส้นทางที่ระบุคุณสามารถสังเกตภาพที่บันทึกได้ดังนี้ -