ใบงานเรียงตามโจทย์ ไม่ได้เรียงตามแนวคิด หน้านี้รวบรวมแนวคิดทั้งหมดเรียงจากพื้นฐานขึ้นไป เพื่อใช้ทบทวนหรือค้นเมื่อต้องการ
ภาพและ pixel
| ภาพคือ array |
ภาพสีคือ NumPy array (height, width, 3) ชนิด uint8 ค่า 0–255 |
img.shape, img.dtype |
1 |
| BGR |
OpenCV เรียงสีเป็น B, G, R |
img[y, x] → [B, G, R] |
1 |
| พิกัด |
array ใช้ img[y, x] (แถว, คอลัมน์) ฟังก์ชันวาดใช้ (x, y) |
cv2.line(img, (x0, y0), (x1, y1), ...) |
1 |
| slicing |
ตัดหรือแก้บางส่วนของภาพ |
img[y0:y1, x0:x1] |
1 |
| ย่อขยาย |
ภาพเล็กประมวลผลเร็ว แต่เสียรายละเอียด |
cv2.resize(img, (w, h)) |
1, 3 |
| วิดีโอ |
ภาพหลายภาพต่อเนื่อง อ่านทีละ frame |
cv2.VideoCapture, cap.read() |
1 |
| JPEG |
บีบอัดภาพเพื่อส่งผ่านเครือข่าย เสียรายละเอียดบางส่วน |
cv2.imdecode, cv2.imencode |
2 |
สีและความสว่าง
| grayscale |
ลดเหลือ 1 ค่าต่อ pixel คือความสว่าง |
cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) |
3 |
| HSV |
แยกเฉดสี (H 0–179) ความอิ่มตัว (S) ความสว่าง (V) |
cv2.COLOR_BGR2HSV |
2 |
| mask |
ภาพขาวดำที่ขาว = pixel ที่อยู่ในช่วงที่สนใจ |
cv2.inRange(hsv, lo, hi) |
2 |
| histogram |
จำนวน pixel ในแต่ละระดับความสว่าง |
cv2.calcHist |
3 |
| contrast |
ความต่างของชิ้นงานกับพื้น \lvert I_b - I_o\rvert / (I_b + I_o) |
gray[roi].mean() |
3 |
| noise |
ความผันผวนของ pixel เดียวกันเมื่อถ่ายซ้ำ |
np.std(stack, axis=0) |
3 |
แยกชิ้นงานออกจากพื้น
| threshold |
แบ่ง pixel เป็นขาว/ดำด้วยค่าเดียว |
cv2.threshold(gray, t, 255, cv2.THRESH_BINARY) |
3 |
| Otsu |
หา threshold ให้อัตโนมัติจาก histogram |
cv2.THRESH_OTSU |
3, 5 |
| blur |
ลด noise โดยเฉลี่ยกับ pixel รอบข้าง (convolution) |
cv2.GaussianBlur(img, (5, 5), 0) |
4 |
| morphology |
opening ลบจุดเล็ก closing ปิดรูเล็ก |
cv2.morphologyEx |
2 |
| ผลต่างของภาพ |
หาสิ่งที่ต่างจากภาพต้นแบบ |
cv2.absdiff(a, b) |
4 |
รูปทรงและการวัด
| contour |
เส้นขอบของบริเวณสีขาว |
cv2.findContours |
2 |
| ลำดับชั้นของ contour |
แยกขอบนอกกับรูด้านใน |
cv2.RETR_CCOMP, hierarchy |
5 |
| ค่าทางเรขาคณิต |
พื้นที่ เส้นรอบรูป จำนวนมุม ความกลม 4\pi A/P^2 |
cv2.contourArea, cv2.arcLength, cv2.approxPolyDP |
2 |
| กรอบล้อมรอบ |
สี่เหลี่ยมตรง สี่เหลี่ยมหมุนได้ วงกลม |
cv2.boundingRect, cv2.minAreaRect, cv2.minEnclosingCircle |
2, 5 |
| ROI |
บริเวณที่สนใจ ตรวจเฉพาะส่วนนั้น |
slicing หรือ mask |
4 |
ตำแหน่งและการสอบเทียบ
| scale factor |
mm ต่อ pixel จากวัตถุที่รู้ขนาด |
k = L_{\mathrm{mm}} / L_{\mathrm{px}} |
2, 5 |
| marker |
จุดอ้างอิงที่หาตำแหน่งและหมายเลขได้แม่นยำ |
cv2.aruco.ArucoDetector |
4 |
| homography |
แปลงระนาบเอียงเป็นภาพด้านบน |
cv2.getPerspectiveTransform, cv2.warpPerspective |
4 |
| lens distortion |
เลนส์ทำให้เส้นตรงที่ขอบภาพโค้ง |
cv2.calibrateCamera, cv2.undistort |
5 |
AI
| object detection |
หาชนิดและ Bounding Box ของวัตถุ |
YOLO(...)(img) |
1 |
| confidence |
ความมั่นใจของโมเดล 0–1 |
obj.conf |
1 |
| tracking |
ให้ ID ประจำวัตถุข้าม frame |
model.track(..., persist=True) |
1 |
เวลาและความเชื่อถือได้
| fps, เวลาประมวลผล, latency |
อัตราการรับภาพ เวลาที่โค้ดใช้ต่อภาพ และความหน่วงจากเหตุการณ์จริง เป็นคนละค่ากัน |
3 |
| motion blur |
ชิ้นงานเคลื่อนระหว่างที่ชัตเตอร์เปิด จำกัดความเร็วสูงสุด |
3 |
| error |
e = N_{\mathrm{measured}} - N_{\mathrm{reference}} |
1, 2 |
| FRR, FAR |
สัดส่วนของดีที่ถูกคัดทิ้ง และของเสียที่หลุดไป |
4 |
| repeatability, %GRR |
ความกระจายของการวัดซ้ำเทียบกับ tolerance |
5 |
อ่านเพิ่มเติม
เว็บสอน OpenCV แบบเรียงจากพื้นฐาน ใช้ค้นรายละเอียดของแต่ละคำสั่ง