คลาส ImageIcon เป็นการนำ Icon interface ไปปฏิบัติ ซึ่งวาดไอคอนจาก Images คุณสามารถแสดงภาพบนหน้าต่าง Swing ได้โดยใช้คลาสนี้ คอนสตรัคเตอร์ของคลาสนี้รับออบเจ็กต์ BufferedImage เป็นพารามิเตอร์
ดังนั้น เพื่อแสดงภาพ OpenCV ที่เก็บอยู่ในออบเจ็กต์ Mat โดยใช้หน้าต่าง Swing คุณต้องแปลงมันเป็นออบเจ็กต์ BufferedImage และส่งเป็นพารามิเตอร์ให้เมธอด ImageIcon
ตัวอย่างโค้ด
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import org.opencv.core.Core;
import org.opencv.core.Mat;
import org.opencv.core.MatOfByte;
import org.opencv.imgcodecs.Imgcodecs;
public class DisplayingImagesUsingSwings {
public static void main(String args[]) throws Exception {
// โหลดไลบรารีหลักของ OpenCV
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
// อ่านภาพจากไฟล์
String file = "D:\\images\\tree.jpg";
Mat image = Imgcodecs.imread(file);
// เข้ารหัสภาพ
MatOfByte matOfByte = new MatOfByte();
Imgcodecs.imencode(".jpg", image, matOfByte);
// เก็บ Mat ที่เข้ารหัสไว้ในอาร์เรย์ไบต์
byte[] byteArray = matOfByte.toArray();
// เตรียม Buffered Image
InputStream in = new ByteArrayInputStream(byteArray);
BufferedImage bufImage = ImageIO.read(in);
// สร้าง JFrame
JFrame frame = new JFrame();
// ตั้งค่าเนื้อหาให้ JFrame
frame.getContentPane().add(new JLabel(new ImageIcon(bufImage)));
frame.pack();
frame.setVisible(true);
System.out.println("Image Loaded");
}
}
ผลลัพธ์
เมื่อรันโปรแกรม จะแสดงผลลัพธ์ดังต่อไปนี้:
