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อีเจียน Oฉ Interest. |
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
หากคุณเปิดเส้นทางที่ระบุคุณสามารถสังเกตภาพที่บันทึกได้ดังนี้ -