การลบพื้นหลังออกจากภาพจากกล้องเว็บแคมโดยใช้ Python สามารถทำได้โดยใช้ไลบรารี OpenCV และ Mediapipe ซึ่งเป็นเครื่องมือที่ช่วยในการตรวจจับและแยกวัตถุในภาพได้อย่างแม่นยำ เช่น ตัวคนในภาพ
ขั้นตอนการทำ:
1. ติดตั้งไลบรารีที่จำเป็น
ติดตั้ง OpenCV และ Mediapipe โดยใช้คำสั่งด้านล่าง:
pip install opencv-python mediapipe
2.เขียนโค้ดสำหรับลบพื้นหลัง
ใช้ Mediapipe เพื่อตรวจจับคนในภาพและลบพื้นหลังออก:
import cv2
import mediapipe as mp
import numpy as np
# เตรียมโมเดล Mediapipe Selfie Segmentation
mp_selfie_segmentation = mp.solutions.selfie_segmentation
segmenter = mp_selfie_segmentation.SelfieSegmentation(model_selection=1)
# เปิดกล้องเว็บแคม
cap = cv2.VideoCapture(0)
# สีพื้นหลัง (สามารถปรับเป็นสีใดก็ได้)
BACKGROUND_COLOR = (0, 255, 0) # สีเขียว
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("ไม่สามารถอ่านภาพจากกล้องได้")
break
# แปลงสีภาพจาก BGR เป็น RGB
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
# ประมวลผลภาพเพื่อแยกพื้นหลัง
results = segmenter.process(rgb_frame)
# สร้างแมสก์สำหรับพื้นที่ที่ต้องการเก็บไว้
mask = results.segmentation_mask > 0.5
# ลบพื้นหลังโดยแทนด้วยสีที่กำหนด
background = np.zeros_like(frame, dtype=np.uint8)
background[:] = BACKGROUND_COLOR
output_frame = np.where(mask[..., None], frame, background)
# แสดงผลภาพ
cv2.imshow('Webcam - Background Removed', output_frame)
# กด 'q' เพื่อปิดโปรแกรม
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# ปิดการทำงาน
cap.release()
cv2.destroyAllWindows()
3.การปรับแต่ง
- สามารถเปลี่ยนสีพื้นหลัง (BACKGROUND_COLOR) หรือใส่ภาพอื่นแทนพื้นหลังได้โดยการโหลดภาพใหม่และใส่แทนที่
background
- หากต้องการปรับความแม่นยำของการแยกพื้นหลัง สามารถใช้โมเดล Mediapipe Model Selection (เช่น
model_selection=1
สำหรับฉากทั่วไป และmodel_selection=0
สำหรับฉากใกล้ชิด)
ตัวเลือกเพิ่มเติม:
หากต้องการเพิ่มคุณภาพการลบพื้นหลังให้สมจริงยิ่งขึ้น อาจใช้ไลบรารี AI เช่น rembg หรือ Deeplab ที่สามารถประมวลผลภาพที่ซับซ้อนยิ่งขึ้นได้!