บทนำ
Image Array คือการเก็บหลายภาพในอาร์เรย์ของ Mat เพื่อจัดการหลายภาพพร้อมกัน เช่น สไลด์โชว์, เปรียบเทียบภาพ, Batch processing
ตัวอย่างโค้ด
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
using namespace cv;
using namespace std;
int main() {
// ประกาศอาร์เรย์ของ Mat ขนาด 3
Mat images[3];
namedWindow("PhotoFrame1");
namedWindow("PhotoFrame2");
namedWindow("PhotoFrame3");
// โหลดภาพเข้าอาร์เรย์
images[0] = imread("cat.jpg");
images[1] = imread("dog.jpg");
images[2] = imread("bird.jpg");
// ตรวจสอบการโหลด
for (int i = 0; i < 3; i++) {
if (images[i].empty()) {
cout << "โหลดภาพ index " << i << " ไม่สำเร็จ" << endl;
}
}
// แสดงภาพ
imshow("PhotoFrame1", images[0]);
imshow("PhotoFrame2", images[1]);
imshow("PhotoFrame3", images[2]);
waitKey(0);
return 0;
}
การใช้ vector<Mat> (ยืดหยุ่นกว่า)
vector<Mat> images;
images.push_back(imread("img1.jpg"));
images.push_back(imread("img2.jpg"));
// เพิ่มได้ไม่จำกัด
for (size_t i = 0; i < images.size(); i++) {
imshow("Image " + to_string(i), images[i]);
}
การประยุกต์ใช้ Image Array
- Slideshow: แสดงภาพทีละภาพด้วย waitKey(delay)
- Batch Processing: ประมวลผลหลายภาพในลูป
- Video Frames: เก็บเฟรมจากวิดีโอ
- Image Comparison: เปรียบเทียบภาพคู่
- Panorama Stitching: เก็บภาพหลายภาพเพื่อต่อกัน
การจัดการหน่วยความจำ
Matใช้ Reference Counting - ก็อปปี้อาร์เรย์ไม่ก็อปปี้ข้อมูลภาพ- ใช้
clone()ถ้าต้องการก็อปปี้ข้อมูลจริง images[i].release()ปล่อยหน่วยความจำภาพที่ i
ผลลัพธ์

สรุป
Image Array (Mat array หรือ vector<Mat>) เป็นวิธีจัดการหลายภาพในโปรแกรมเดียว เหมาะสำหรับ Batch processing, Slideshow, และงานที่ต้องเปรียบเทียบ/ประมวลผลหลายภาพพร้อมกัน