Computer Vision Opencv IT General

Computer Vision Opencv

📅 2026-02-09 | โดย อ.บอม กิตติทัศน์ เจริญพนาสิทธิ์ — SiamCafe.net Since 1997

Computer Vision OpenCV: พี่บอม SiamCafe มาสอนน้อง

Computer Vision OpenCV คืออะไร / ทำไมถึงสำคัญ

น้องๆ เคยสงสัยมั้ยว่าทำไมกล้องวงจรปิดถึงจับหน้าเราได้? ทำไมรถยนต์สมัยใหม่ถึงขับเองได้? คำตอบส่วนใหญ่อยู่ที่ Computer Vision นี่แหละ สมัยผมทำร้านเน็ต ผมเคยคิดเล่นๆ ว่าถ้ามีโปรแกรมที่จำหน้าลูกค้าขาประจำได้ จะดีแค่ไหน ไม่ต้องคอยถามชื่อให้เสียเวลา Computer Vision นี่แหละที่ทำให้ฝันเป็นจริงได้

Computer Vision หรือ CV คือศาสตร์ที่ทำให้คอมพิวเตอร์ "มองเห็น" และ "เข้าใจ" ภาพได้ เหมือนที่คนเรามองแล้วรู้ว่านี่คือแมว นี่คือหมา นี่คือรถยนต์ OpenCV (Open Source Computer Vision Library) เป็นเหมือนห้องสมุดขนาดใหญ่ ที่รวบรวมเครื่องมือและฟังก์ชันต่างๆ ที่จำเป็นต่อการพัฒนาโปรแกรม CV เอาไว้ให้เราใช้กันฟรีๆ

ทำไมมันถึงสำคัญน่ะเหรอ? ลองคิดดูสิครับ ตั้งแต่ระบบรักษาความปลอดภัย ระบบขนส่ง ระบบการแพทย์ ไปจนถึงวงการบันเทิง CV เข้าไปมีบทบาทหมดแล้ว มันช่วยเพิ่มประสิทธิภาพ ลดต้นทุน และสร้างโอกาสใหม่ๆ ได้อีกมากมาย

พื้นฐานที่ต้องรู้

Image Representation: ภาพมันคืออะไรกันแน่?

ภาพที่เราเห็นในคอมพิวเตอร์จริงๆ แล้วมันก็คือชุดตัวเลขครับ แต่ละตัวเลขแทนค่าความสว่างของสีในแต่ละจุด (pixel) ภาพสีก็จะมีหลาย layer เช่น RGB (Red, Green, Blue) แต่ละ layer ก็เก็บค่าความสว่างของสีนั้นๆ ยกตัวอย่างเช่น ภาพขาวดำ ค่าแต่ละ pixel จะมีตั้งแต่ 0 (ดำสนิท) ถึง 255 (ขาวสว่าง)

สมัยก่อนผมเคยลองเขียนโปรแกรมง่ายๆ เปลี่ยนภาพสีเป็นขาวดำเอง สนุกดี ได้เห็นเลยว่าแต่ละ pixel มันมีค่าอะไรบ้าง

Image Processing: แต่งหน้าให้ภาพ

Image Processing คือการปรับแต่งแก้ไขภาพ เช่น การปรับความสว่าง ความคมชัด การลด noise (จุดรบกวน) หรือการใส่ filter ต่างๆ พวก filter นี่แหละที่ทำให้เราสามารถตรวจจับขอบ (edge detection) หรือหาวัตถุในภาพได้

ผมเคยเจอเคสที่ลูกค้าอยากให้โปรแกรมอ่านป้ายทะเบียนรถ ตอนแรกภาพมันเบลอมาก มองอะไรไม่เห็นเลย ต้องใช้เทคนิค Image Processing เข้ามาช่วยปรับภาพให้คมชัดขึ้น ถึงจะอ่านทะเบียนได้

Feature Extraction: หาจุดเด่นของภาพ

Feature Extraction คือการดึงเอา "จุดเด่น" ของภาพออกมา เช่น มุม ขอบ หรือรูปร่าง เพื่อเอาไปใช้ในการวิเคราะห์ต่อ ยกตัวอย่างเช่น ถ้าเราต้องการสร้างโปรแกรมจดจำใบหน้า เราจะต้องหาจุดเด่นบนใบหน้า เช่น ตำแหน่งของดวงตา จมูก ปาก แล้วเอาไปเปรียบเทียบกับฐานข้อมูล

OpenCV มีฟังก์ชันสำเร็จรูปให้เราใช้เยอะแยะเลยครับ ไม่ต้องเขียนเองทั้งหมด

วิธีใช้งาน / เริ่มต้นยังไง

เริ่มต้นง่ายๆ เลยครับ ติดตั้ง OpenCV ก่อน ถ้าใช้ Python ก็แค่ pip install opencv-python แค่นี้เอง


pip install opencv-python

จากนั้นก็ import เข้ามาในโปรแกรมได้เลย


import cv2

เริ่มต้นด้วยการอ่านภาพเข้ามา แล้วลองแสดงผลดู


import cv2

# อ่านภาพ
img = cv2.imread('my_image.jpg')

# แสดงภาพ
cv2.imshow('Image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

โค้ดข้างบนจะอ่านไฟล์ภาพชื่อ 'my_image.jpg' แล้วแสดงผลออกมาในหน้าต่าง ถ้าไม่มีภาพนี้ โปรแกรมจะ error นะครับ ลองเปลี่ยนเป็นชื่อไฟล์ภาพที่มีอยู่ในเครื่องเราดู

ขั้นตอนปฏิบัติจริง

Face Detection: จับหน้า

Face Detection เป็นหนึ่งใน use case ที่ฮิตที่สุดของ OpenCV ลองดูโค้ดนี้


import cv2

# Load the cascade
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

# Read the input image
img = cv2.imread('test.jpg')

# Convert into grayscale
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# Detect faces
faces = face_cascade.detectMultiScale(gray, 1.1, 4)

# Draw rectangle around the faces
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)

# Display the output
cv2.imshow('img', img)
cv2.waitKey()

โค้ดนี้จะใช้ไฟล์ 'haarcascade_frontalface_default.xml' ซึ่งเป็นไฟล์ที่ train มาแล้วสำหรับการตรวจจับใบหน้า เราสามารถหาไฟล์นี้ได้ง่ายๆ ในอินเทอร์เน็ต หรือจาก OpenCV GitHub repository โค้ดจะอ่านภาพเข้ามา แปลงเป็นภาพขาวดำ แล้วใช้ cascade classifier ตรวจจับใบหน้า ถ้าเจอใบหน้า ก็จะวาดสี่เหลี่ยมรอบๆ

ลองเอาไปรันดูนะครับ สนุกมาก

Object Tracking: ตามติดชีวิตวัตถุ

Object Tracking คือการติดตามวัตถุที่สนใจในวิดีโอ OpenCV มี algorithm ให้เลือกใช้หลายแบบ เช่น MeanShift, CAMShift, หรือ CSRT แต่ละแบบก็มีข้อดีข้อเสียต่างกัน

สมัยก่อนผมเคยลองทำโปรเจกต์ติดตามลูกบอลในสนามบาสเก็ตบอล ใช้ algorithm ง่ายๆ อย่าง MeanShift ก็พอใช้ได้ แต่ถ้าลูกบอลมีการเคลื่อนที่เร็ว หรือมีวัตถุอื่นมาบัง ก็จะหลุด track ได้ง่ายๆ

ลองเข้าไปดูตัวอย่างโค้ดใน OpenCV documentation ได้เลยครับ มีให้ศึกษาเยอะแยะ SiamCafe Blog ก็มีบทความเกี่ยวกับ OpenCV ด้วยนะ

เปรียบเทียบกับทางเลือกอื่น

OpenCV ไม่ได้เป็น library ตัวเดียวที่ใช้ทำ Computer Vision นะครับ ยังมีตัวเลือกอื่นๆ อีก เช่น

OpenCV เหมาะสำหรับงานที่ต้องการความเร็ว และสามารถทำงานบนอุปกรณ์ที่มีทรัพยากรจำกัดได้ดี เช่น กล้องวงจรปิด หรือระบบฝังตัว

Feature OpenCV TensorFlow PyTorch
ใช้งานง่าย สูง ปานกลาง ปานกลาง
ความเร็ว สูง ปานกลาง ปานกลาง
Deep Learning รองรับ (แต่ไม่เน้น) สูง สูง
Platform หลากหลาย หลากหลาย หลากหลาย
License BSD (Free) Apache 2.0 (Free) BSD (Free)

Best Practices / เคล็ดลับจากประสบการณ์

เอาล่ะน้องๆ มาถึงส่วนสำคัญที่พี่บอมอยากแชร์จากประสบการณ์จริง สมัยทำร้านเน็ตคาเฟ่ SiamCafe.net ตั้งแต่ปี 2540 กว่าๆ โน่น (บ่งบอกอายุมาก 555) เรื่อง Computer Vision กับ OpenCV นี่ไม่ใช่แค่ทฤษฎีนะ มันคือการแก้ปัญหาหน้างานจริงๆ

สมัยก่อนเน็ตช้า คอมก็ไม่ได้แรงแบบนี้ แต่เราก็พยายามเอา OpenCV มาใช้ทำอะไรสนุกๆ เช่น ระบบนับจำนวนคนเข้าร้าน (แบบหยาบๆ) หรือระบบตรวจจับว่ามีใครแอบเล่นเกมโป๊รึเปล่า (อันนี้ยากหน่อย แต่ทำได้นะ!)

3-4 เทคนิคที่ใช้ได้จริง

นี่คือเทคนิคที่พี่ว่าเวิร์ค และเอาไปปรับใช้ได้จริง ไม่ต้องเขียนโค้ดเทพอะไรมากมาย:

  1. การปรับภาพให้คมชัด (Image Sharpening): ง่ายๆ เลยคือใช้ filter แบบ Unsharp Masking จะช่วยให้ขอบวัตถุในภาพชัดขึ้น เหมาะกับการเอาไปใช้ตรวจจับวัตถุเล็กๆ ที่มองเห็นยาก
  2. 
        import cv2
        import numpy as np
    
        def sharpen_image(image):
          kernel = np.array([[-1, -1, -1],
                             [-1,  9, -1],
                             [-1, -1, -1]])
          return cv2.filter2D(image, -1, kernel)
    
        # Example Usage
        img = cv2.imread('image.jpg')
        sharpened_img = sharpen_image(img)
        cv2.imwrite('sharpened_image.jpg', sharpened_img)
      
  3. การใช้ Haar Cascades สำหรับการตรวจจับใบหน้า (Face Detection): อันนี้เบสิค แต่ทรงพลัง OpenCV มี Haar Cascades มาให้แล้ว แค่โหลดมาใช้ก็ detect หน้าคนได้สบายๆ เอาไปทำระบบล็อกอินด้วยใบหน้า หรือระบบนับจำนวนคนได้เลย
  4. 
        import cv2
    
        face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
    
        def detect_faces(image):
          gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
          faces = face_cascade.detectMultiScale(gray, 1.1, 4)
          for (x, y, w, h) in faces:
            cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
          return image
    
        # Example Usage
        img = cv2.imread('image.jpg')
        detected_faces_img = detect_faces(img)
        cv2.imwrite('detected_faces.jpg', detected_faces_img)
      
  5. การตรวจจับการเคลื่อนไหว (Motion Detection): เทคนิคนี้เอาไว้ใช้ทำระบบรักษาความปลอดภัยได้ดี สมัยก่อนพี่เคยทำระบบเตือนภัยตอนกลางคืน ถ้ามีใครเดินผ่านหน้าร้าน จะส่งเสียงเตือน (สมัยนั้นยังไม่มีกล้องวงจรปิด IP Camera แบบทุกวันนี้) หลักการคือเอาภาพเฟรมก่อนหน้ามาลบกับเฟรมปัจจุบัน ถ้ามีส่วนต่างเยอะๆ ก็แปลว่ามีการเคลื่อนไหว
  6. 
        import cv2
    
        def detect_motion(frame1, frame2):
          diff = cv2.absdiff(frame1, frame2)
          gray = cv2.cvtColor(diff, cv2.COLOR_BGR2GRAY)
          blur = cv2.GaussianBlur(gray, (5, 5), 0)
          _, thresh = cv2.threshold(blur, 20, 255, cv2.THRESH_BINARY)
          dilated = cv2.dilate(thresh, None, iterations=3)
          contours, _ = cv2.findContours(dilated, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
          return contours
    
        # Example Usage (using video capture)
        cap = cv2.VideoCapture(0) # 0 for default camera
        ret, frame1 = cap.read()
        ret, frame2 = cap.read()
    
        while cap.isOpened():
          contours = detect_motion(frame1, frame2)
          for contour in contours:
            (x, y, w, h) = cv2.boundingRect(contour)
            if cv2.contourArea(contour) < 700: # Adjust threshold as needed
              continue
            cv2.rectangle(frame1, (x, y), (x+w, y+h), (0, 255, 0), 2)
    
          cv2.imshow('Motion Detection', frame1)
          frame1 = frame2
          ret, frame2 = cap.read()
    
          if cv2.waitKey(40) == 27: # Press ESC to exit
            break
    
        cap.release()
        cv2.destroyAllWindows()
      

FAQ คำถามที่พบบ่อย

OpenCV ยากไหมครับ?

ถ้าพื้นฐาน programming แน่นๆ หน่อยก็ไม่ยากเกินไปหรอกน้อง แต่ถ้าไม่เคยเขียนโค้ดเลย อาจจะต้องใช้เวลาเรียนรู้เยอะหน่อย เริ่มจาก tutorial ง่ายๆ ก่อนก็ได้

ต้องใช้ภาษาอะไรเขียน OpenCV ครับ?

ส่วนใหญ่เค้าใช้ Python กัน เพราะมันง่าย มี library ให้ใช้เยอะแยะ แต่ C++ ก็ยังเป็นที่นิยมอยู่ เพราะมันเร็วกว่า

จะเอา OpenCV ไปทำอะไรได้บ้างครับ?

โอ้ย! เยอะแยะเลยน้อง ตั้งแต่ระบบรักษาความปลอดภัย ระบบจดจำใบหน้า ระบบควบคุมหุ่นยนต์ ไปจนถึง application ในมือถือ

OpenCV ฟรีไหมครับ?

ฟรีครับ! เป็น Open Source Software เอาไปใช้ได้เลยไม่ต้องเสียเงิน

สรุป

Computer Vision กับ OpenCV เป็น field ที่น่าสนใจ และมีประโยชน์มากๆ พี่ว่าน้องๆ ที่สนใจด้าน IT ควรลองศึกษาดูนะ มันอาจจะเปลี่ยนชีวิตน้องๆ ไปเลยก็ได้ iCafeForex ก็เป็นอีกหนึ่งช่องทางในการเรียนรู้เรื่องพวกนี้ได้เหมือนกัน อย่ากลัวที่จะลองผิดลองถูก เพราะนั่นคือวิธีเรียนรู้ที่ดีที่สุด SiamCafe Blog ก็มีบทความอื่นๆ ที่น่าสนใจ ลองเข้าไปอ่านดูนะ!