ตอนที่ 2: สแกนโครงสร้าง OpenCV มีโมดูลอะไรให้ใช้บ้าง?

1. 🎯 ตอนที่ 2: สแกนโครงสร้าง OpenCV คลังอาวุธลับของนักพัฒนา Vision มีโมดูลอะไรให้ใช้บ้าง?
2. 📖 เปิดฉาก (The Hook)
น้องๆ เคยเดินเข้าห้างขายวัสดุก่อสร้างขนาดใหญ่ เพื่อไปซื้ออะไหล่มาประกอบหุ่นยนต์ไหมครับ? ถ้าเราไม่รู้ว่าแผนกไหนขายอะไร เราคงต้องเดินหลงวนไปมาเสียเวลาเป็นวันๆ การเขียนโปรแกรมด้วย OpenCV ก็เหมือนกันครับ! ด้วยความที่มันมีอัลกอริทึมที่ถูกปรับแต่งมาให้ใช้งานมากกว่า 2,500 รายการ ถ้าเราไม่รู้โครงสร้างของมัน เวลาเจอปัญหาหน้างานจริง (เช่น ต้องตรวจจับของหลุด QC บนสายพานที่วิ่งเร็วๆ) เราก็จะไม่รู้ว่าต้องวิ่งไปเรียกใช้คำสั่งจากส่วนไหน
ในฐานะวิศวกรสาย Vision รุ่นพี่ วันนี้ผมจะขอชงกาแฟสักแก้ว แล้วพาน้องๆ ไปกางแผนที่ดูโครงสร้างของ OpenCV ที่ถูกออกแบบมาในลักษณะ “Modular Architecture” (แบ่งเป็นโมดูลย่อยๆ) กันครับ ว่าในคลังอาวุธนี้มี “โมดูล” หลักอะไรบ้าง แต่ละส่วนมีหน้าที่อะไร และเราจะเรียกฮีโร่คนไหนมากู้สถานการณ์ในแต่ละโปรเจกต์!
3. 🧠 แก่นวิชา (Core Concepts)
OpenCV ถูกแบ่งออกเป็นไลบรารีย่อยๆ หลายโมดูล ซึ่งเราสามารถเลือกใช้งานเฉพาะส่วนที่จำเป็นได้ นี่คือ 5 โมดูลระดับพระกาฬที่คนทำ Machine Vision ต้องเจอแทบทุกวัน:
- 1.
core(หัวใจและโครงสร้างพื้นฐาน)- มันคืออะไร: โมดูลที่เก็บโครงสร้างข้อมูลพื้นฐานทั้งหมด เช่น ตัวแปรประเภท
Mat(Matrix),Vec,Scalarรวมถึงฟังก์ชันการคำนวณทางคณิตศาสตร์ระดับล่าง และการจัดการหน่วยความจำ - เปรียบเทียบ: เหมือนเป็นโครงกระดูกและระบบสูบฉีดเลือดของ OpenCV ภาพทุกภาพจะต้องถูกเก็บในรูปแบบ
Matซึ่งเปรียบเสมือนตาราง Excel ขนาดยักษ์ที่เก็บค่าสีของแต่ละพิกเซลเอาไว้ - สถานการณ์ใช้งาน: ทุกครั้งที่คุณโหลดภาพเข้ามาเก็บไว้ในตัวแปร หรือต้องการคูณ/บวก ค่า Matrix ของภาพ คุณกำลังใช้งานโมดูลนี้อยู่ครับ
- มันคืออะไร: โมดูลที่เก็บโครงสร้างข้อมูลพื้นฐานทั้งหมด เช่น ตัวแปรประเภท
- 2.
imgproc(โรงงานตกแต่งภาพ - Image Processing)- มันคืออะไร: รวมอัลกอริทึมการประมวลผลภาพ (Image Processing) เช่น การกรองภาพ (Filtering), แปลงปริภูมิสี (Color Space Conversion), การหาขอบ (Edge Detection), Morphological Operations และทำ Histograms
- เปรียบเทียบ: เหมือนเรามีเครื่องยนต์ของโปรแกรม Photoshop อยู่ในมือ
- สถานการณ์ใช้งาน: เมื่อภาพจากกล้องในโรงงานมืดเกินไป หรือมี Noise เยอะ เราจะใช้โมดูลนี้แปลงภาพเป็น Grayscale, ทำ Thresholding หรือใส่ Gaussian Blur เพื่อปรับภาพให้เคลียร์ก่อนส่งให้ AI วิเคราะห์
- 3.
highgui(หน้าต่างสื่อสารกับมนุษย์ - High-level GUI)- มันคืออะไร: อินเทอร์เฟซระดับสูงสำหรับสร้างหน้าต่างโปรแกรม (Window), รับค่าจากการคลิกเมาส์ (Mouse Events), กดคีย์บอร์ด, หรือสร้างแถบเลื่อน (Trackbars)
- เปรียบเทียบ: หน้าปัดและปุ่มควบคุมบนแผงคอนโซลของหุ่นยนต์
- สถานการณ์ใช้งาน: เวลาเราอยากทดสอบอัลกอริทึม Vision App เร็วๆ เราจะใช้
highguiสร้างหน้าต่างโชว์ภาพ (imshow) และทำ Trackbar ให้ผู้ใช้เลื่อนปรับค่าความสว่างได้แบบ Real-time
- 4.
video(นักจับสังเกตการเคลื่อนไหว - Video Analysis)- มันคืออะไร: โมดูลสำหรับการวิเคราะห์วิดีโอโดยเฉพาะ เช่น การประมาณทิศทางการเคลื่อนที่ด้วย Optical Flow, การแยกพื้นหลัง (Background Subtraction) และการติดตามวัตถุ (Object Tracking)
- สถานการณ์ใช้งาน: สมมติว่าเราทำระบบกล้องวงจรปิด (Surveillance) แล้วต้องการตรวจจับคนเดินบุกรุกเข้ามาในโซนหวงห้าม เราจะใช้ Background Subtraction จากโมดูลนี้เพื่อดึงเฉพาะสิ่งที่เคลื่อนไหวออกมาจากภาพพื้นหลังที่อยู่นิ่งๆ
- 5.
dnn(สมองกลอัจฉริยะ - Deep Neural Network)- มันคืออะไร: โมดูลที่ใช้สำหรับรันโมเดล Deep Learning (Forward Pass / Inference) สามารถโหลดโมเดลที่เทรนเสร็จแล้วจากเฟรมเวิร์กดังๆ อย่าง TensorFlow, Caffe, Torch, Darknet (YOLO) หรือฟอร์แมต ONNX มาใช้งานได้ทันที
- สถานการณ์ใช้งาน: เมื่อ Rule-based Vision ธรรมดาเอาไม่อยู่ เช่น ต้องทำ Face Detection แบบแม่นยำสูง หรือรันโมเดล YOLO เพื่อตรวจจับหมวกนิรภัยของพนักงาน เราจะโหลดไฟล์โมเดล (เช่น
.pbหรือ.weights) เข้ามาผ่านโมดูลdnnเพื่อทำการทำนายผลครับ

4. 💻 ร่ายมนต์คำสั่ง (Show me the Code)
ลองมาดูโค้ด C++ ที่แสดงให้เห็นว่า “โมดูลต่างๆ” มันทำงานร่วมกันอย่างกลมกลืนใน Pipeline เดียวได้อย่างไรครับ (สังเกตที่การ #include นะครับ)
#include <opencv2/core.hpp> // เรียกใช้โมดูล core สำหรับ cv::Mat
#include <opencv2/imgproc.hpp> // เรียกใช้โมดูล imgproc สำหรับ cvtColor, GaussianBlur
#include <opencv2/highgui.hpp> // เรียกใช้โมดูล highgui สำหรับ namedWindow, imshow
#include <opencv2/videoio.hpp> // เรียกใช้โมดูล videoio (หรือ highgui ในเวอร์ชันเก่า) สำหรับดึงภาพวิดีโอ
#include <iostream>
using namespace cv;
using namespace std;
int main() {
// 1. (videoio) สร้างอ็อบเจ็กต์เชื่อมต่อกับกล้อง Webcam ตัวแรก (Index 0)
VideoCapture cap(0);
if(!cap.isOpened()) return -1;
// 2. (core) สร้างตัวแปร Mat เก็บภาพต้นฉบับและภาพที่ผ่านการแต่งแล้ว
Mat frame, edges;
// 3. (highgui) สร้างหน้าต่างสำหรับแสดงผล
namedWindow("Edge Detection", WINDOW_NORMAL);
for(;;) {
// ดึงภาพทีละเฟรมจากกล้องเข้ามาใส่ในตัวแปร frame
cap >> frame;
// 4. (imgproc) เปลี่ยนภาพสี BGR เป็น Grayscale (ขาวดำ)
cvtColor(frame, edges, COLOR_BGR2GRAY);
// 5. (imgproc) ใส่ Filter เบลอภาพนิดหน่อยเพื่อลด Noise ก่อนหาขอบ
GaussianBlur(edges, edges, Size(7,7), 1.5, 1.5);
// 6. (imgproc) ใช้เวทมนตร์ Canny Edge Detection ดึงเฉพาะเส้นขอบวัตถุออกมา
Canny(edges, edges, 0, 30, 3);
// 7. (highgui) โชว์ภาพขอบที่ได้ลงบนหน้าต่าง
imshow("Edge Detection", edges);
// (highgui) รอรับค่าคีย์บอร์ด 30 มิลลิวินาที ถ้ากดปุ่มไหนก็ตามให้ออกจาก Loop
if(waitKey(30) >= 0) break;
}
return 0;
}5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)
- DNN Module เป็นแค่คนลงมือทำ ไม่ใช่คนเรียนรู้: หลายคนเข้าใจผิดว่าเราสามารถเอารูปมารันสคริปต์สอน AI ใน OpenCV ได้ ต้องจำไว้ว่าโมดูล
dnnถูกออกแบบมาเพื่อทำ “Inference” (ประมวลผลไปข้างหน้า) เท่านั้น มันไม่รองรับการทำ Backward Propagation เพื่ออัปเดตน้ำหนักเครือข่ายสำหรับการเทรน เราต้องไปเทรนโมเดลใน TensorFlow หรือ PyTorch ให้เสร็จก่อน แล้วค่อยเอาไฟล์โมเดลมาเสียบใช้ใน OpenCV เพื่อรีดความเร็วตอนนำไปใช้จริงครับ - จัดกระเป๋าให้เบาเวลา Deployment: สถาปัตยกรรม Modular ของ OpenCV มีข้อดีมากเวลาเราเอาซอฟต์แวร์ไปลงบอร์ดฝังตัว (Embedded Systems) ที่เมมโมรีน้อยๆ เราสามารถเลือกนำไปใช้งานหรือคอมไพล์เฉพาะโมดูลที่เราต้องการ (เช่น แค่
core,imgprocและvideoio) ทำให้ตัวแอปพลิเคชันเราเบาหวิวและบำรุงรักษาได้ง่ายขึ้น
6. 🏁 บทสรุป (To be continued…)
เป็นยังไงบ้างครับ? พอเราสแกนดูโครงสร้างแบบนี้แล้ว การเรียนรู้ OpenCV ก็ดูไม่น่ากลัวอีกต่อไปใช่ไหมครับ แค่เราแบ่งปัญหาออกเป็นส่วนๆ (ดึงภาพ -> ตกแต่งภาพ -> วิเคราะห์/หาวัตถุ -> แสดงผล) เราก็จะรู้ว่าต้องวิ่งไปหยิบคำสั่งจากโมดูลไหนมาใช้
ในตอนต่อไป เราจะมาเจาะลึกที่แก่นกลางของทุกสิ่งนั่นคือโมดูล core และทำความรู้จักกับพระเอกตัวจริงอย่าง cv::Mat ว่ามันเก็บข้อมูลพิกเซลล้านๆ ตัวให้เราจัดการด้วยความเร็วแสงได้ยังไง รอติดตามกันนะครับ!
ต้องการที่ปรึกษาด้านการพัฒนาระบบ AI Camera หรือ Machine Vision ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p