สารบัญ:
- เสบียง
- ขั้นตอนที่ 1: การนำเข้าไลบรารี
- ขั้นตอนที่ 2: การสร้างแทร็กบาร์
- ขั้นตอนที่ 3: การสร้าง TrackBars สำหรับ Hue, Saturation และ Value
- ขั้นตอนที่ 4: วิธีอ่านและปรับขนาดรูปภาพ
- ขั้นตอนที่ 5: การอ่านค่าแถบติดตามเพื่อนำไปใช้กับรูปภาพ
- ขั้นตอนที่ 6: การแสดงภาพและการตั้งค่าขีดจำกัดบนและล่าง
- ขั้นตอนที่ 7: ตอนนี้เป็นขั้นตอนสุดท้าย
- ขั้นตอนที่ 8: ผลลัพธ์สุดท้าย
2025 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2025-01-13 06:58
สวัสดี! คำแนะนำนี้ใช้เพื่อแนะนำวิธีการแยกสีเฉพาะจากรูปภาพใน python โดยใช้ไลบรารี openCV หากคุณเพิ่งเริ่มใช้เทคนิคนี้ ไม่ต้องกังวล ที่ส่วนท้ายของคู่มือนี้ คุณจะสามารถตั้งโปรแกรมโปรแกรมตรวจจับสีของคุณเองได้
ต่อไปนี้เป็นหน้าที่หรือเราสามารถพูดเทคนิคที่คุณจะได้เรียนรู้
1. วิธีอ่านรูปภาพ
2. วิธีสร้างแทร็กบาร์
3. วิธีปรับค่า Hue, Saturation และค่าของภาพโดยใช้แถบแทร็ค
4. จากนั้นจะมีผลลัพธ์สุดท้ายของคุณ
คุณสามารถชมวิดีโอของผลลัพธ์ที่ได้แนบมาด้านล่าง
มาเริ่มกันเลย
เสบียง
- Python3
- ห้องสมุด openCV
- ห้องสมุด numpy
ขั้นตอนที่ 1: การนำเข้าไลบรารี
ภาพเป็นเฟอร์รารีสีเหลืองตามภาพ และเราจะตั้งโปรแกรมให้ดึงเฉพาะสีเหลืองออกจากภาพนั้น
ขั้นตอนแรกจะเป็นการนำเข้าไลบรารีของเรา
1. รวมไลบรารี openCV มันถูกเรียกว่า cv2 ใน python
2. รวมไลบรารี numpy เป็น np คำว่า "as" ทำให้เรา numpy เป็น np ได้ ไม่จำเป็นต้องเขียน numpy ซ้ำแล้วซ้ำเล่า
ขั้นตอนที่ 2: การสร้างแทร็กบาร์
แถบติดตามถูกสร้างขึ้นเพื่อปรับค่าของ Hue, Saturation และ Value ในภาพ
cv2.namedWindow("TrackBars") โค้ดบรรทัดนี้ใช้เพื่อสร้างหน้าต่างเอาต์พุตใหม่และตั้งชื่อหน้าต่างเป็น TrackBars (คุณสามารถตั้งชื่อใดก็ได้ตามต้องการ)
cv2.resizeWindow("TrackBars", 600, 250) ฟังก์ชันนี้ใช้เพื่อปรับขนาดหน้าต่าง "TrackBars" เป็นหน้าต่างที่คุณต้องการปรับขนาดเนื่องจากฉันต้องการปรับขนาดหน้าต่าง TrackBars ที่ฉันเขียนชื่อนั้น ตามด้วยจำนวนเต็มสองตัว จำนวนเต็มทั้งสองนั้นคือความกว้างและความสูง คุณสามารถเล่นกับตัวเลขสองตัวนี้เพื่อเปลี่ยนขนาด
ขั้นตอนที่ 3: การสร้าง TrackBars สำหรับ Hue, Saturation และ Value
ตอนนี้เราจะสร้าง TrackBar ทั้งหมด 6 TrackBar สำหรับ Hue, Saturation และ Value แต่ละอันจะมีสองอันคือ 1 สำหรับขั้นต่ำและ 1 สำหรับสูงสุด เราจะใช้ฟังก์ชัน createTrackbar ของ openCV ขั้นแรกเราจะเห็นไวยากรณ์ของฟังก์ชันนี้
cv2.createTrackbar("WINDOWNAME", "MAINWINDOWNAME", "RANGE") นี้อาจสร้างความสับสน แต่ไม่ต้องกังวลเราจะทำทุกขั้นตอน จำไว้อย่างหนึ่งว่าในค่าสี openCV คือ 179 ความอิ่มตัวคือ 255 และค่าคือ 255
1. การสร้าง TrackBar สำหรับ hue min:
cv2.createTrackbar("ฮิวนาที", "แทร็กบาร์", 0, 179, ว่างเปล่า)
ใน Hue min นี้คือชื่อแทร็กบาร์, TrackBars คือหน้าต่างหลัก, 0 คือตำแหน่งที่ตัวเลื่อนของเราจะอยู่ และ 179 คือช่วงหมายความว่าตัวเงินจะเคลื่อนจาก 0-179
2. การสร้าง TrackBar สำหรับเฉดสีสูงสุด:
cv2.createTrackbar("ฮิวสูงสุด", "แทร็กบาร์", 179, 179, ว่างเปล่า)
ใน Hue max นี้คือชื่อแทร็กบาร์ TrackBars คือหน้าต่างหลัก 179 คือตำแหน่งที่ตัวเลื่อนของเราจะอยู่ และ 179 เป็นช่วงสูงสุดหมายความว่าตัวเงินจะเคลื่อนจาก 179-0
3. ทำซ้ำขั้นตอนในทำนองเดียวกันสำหรับ sat min, sat max, val min และ val max ตามที่แสดงในภาพ
ภาพที่มีพื้นหลังสีขาวเป็นภาพที่ส่งออก แถบแทร็กของคุณจะมีลักษณะเช่นนี้
ขั้นตอนที่ 4: วิธีอ่านและปรับขนาดรูปภาพ
cv2.imread() อนุญาตให้คุณอ่านรูปภาพ สิ่งสำคัญอย่างหนึ่งที่คุณต้องจำไว้คือตำแหน่งของรูปภาพของคุณต้องอยู่ในโฟลเดอร์เดียวกับที่บันทึกโปรแกรมไว้ เราจะใส่ while loop เพราะมันควรจะรันจนกว่าจะกำลังอ่านภาพอยู่หรือเราบอกได้เลยว่าจนกว่าเงื่อนไขจะเป็นจริง
img = cv2.imread("ferrari.jpg")
- ในที่นี้ฉันได้สร้างชื่อตัวแปร " img " ซึ่งฉันกำลังเก็บภาพ
- ภายใน cv2.imread เขียนชื่อรูปภาพที่มีนามสกุลอยู่ภายในเครื่องหมายคำพูดคู่
ในการปรับขนาดรูปภาพ เราจะใช้ฟังก์ชัน cv2.resize ส่วนนี้เป็นทางเลือก หากคุณต้องการปรับขนาด คุณสามารถใช้ฟังก์ชันนี้
ภายใน cv2.resize ให้เขียนชื่อตัวแปรที่จัดเก็บรูปภาพก่อน จากนั้นจึงกำหนดความกว้างและความสูง
ขั้นตอนที่ 5: การอ่านค่าแถบติดตามเพื่อนำไปใช้กับรูปภาพ
ตกลง ตอนนี้เรากำลังจะอ่านค่าของแถบแทร็กบาร์เพื่อให้เราสามารถนำไปใช้กับรูปภาพของเราได้ เราจะได้ค่าโดยใช้ฟังก์ชัน cv2.getTrackbarPos()
มาเริ่มกันที่ส่วนนั้น…
h_min = cv2.getTrackbarPos("ฮิวนาที", "แทร็กบาร์")
ในคำสั่งข้างต้น ฉันกำลังสร้างชื่อตัวแปร h_min ซึ่งฉันจะเก็บค่าของ Hue min ดังนั้นภายในอาร์กิวเมนต์ cv2.getTrackbarPos ที่ 1 จะเป็น " Hue min " เพราะฉันต้องการค่าของ hue min (การสะกดต้องเหมือนกันทุกประการกับฟังก์ชัน createTrackbar) และอาร์กิวเมนต์ที่ 2 จะเป็นชื่อของหน้าต่างแทร็กบาร์ที่เป็นของ
- ทำซ้ำขั้นตอนเดียวกันสำหรับ h_max และฟังก์ชั่นที่เหลือตามที่แสดงในภาพด้านบนแล้วพิมพ์ค่าทั้งหมดโดยใช้ print()
- ผลลัพธ์จะแสดงในรูปที่สอง กำลังพิมพ์ค่าของ h_min, h_max, s_min, s_max, v_min, s_max
ขั้นตอนที่ 6: การแสดงภาพและการตั้งค่าขีดจำกัดบนและล่าง
ตอนนี้ เรามีค่าต่ำสุดและสูงสุดของสี ความอิ่มตัว และค่า เราจะใช้ค่านี้เพื่อกรองภาพออก เพื่อให้เราสามารถส่งออกสีเฉพาะของรูปภาพได้
เราจะสร้างมาสก์สำหรับสิ่งนี้โดยใช้ฟังก์ชัน cv2.inRange และก่อนหน้านั้นเราจะตั้งค่าขีด จำกัด บนและล่างของสีความอิ่มตัวและค่า
ดังนั้นให้สร้างชื่อตัวแปร " lower " และใช้ฟังก์ชัน numpy array กำหนดช่วงของ min สำหรับทั้ง 3 ตัวดังนี้
ต่ำกว่า = np.array([h_min, s_min, v_min])
ทำซ้ำขั้นตอนเดียวกันสำหรับ upper
บน = np.array([h_max, s_max, v_max])
ตอนนี้เราจะสร้างหน้ากากดังนี้
mask = cv2.inRange(ปรับขนาด, ต่ำกว่า, บน) ภายใน cv2.inRang อาร์กิวเมนต์ที่ 1 จะเป็นตัวแปรที่เก็บรูปภาพสุดท้ายของฉัน อาร์กิวเมนต์ที่ 2 จะเป็นขีดจำกัดล่าง และอาร์กิวเมนต์ที่ 3 จะเป็นขีดจำกัดบน
ตอนนี้เรากำลังจะแสดงภาพหลักและมาสก์ ในการแสดงเราจะใช้ฟังก์ชัน cv2.imshow()
cv2.imshow("img", ปรับขนาด) นี่คือการแสดงภาพหลัก อาร์กิวเมนต์ที่ 1 คือชื่อของหน้าต่างที่คุณสามารถตั้งชื่ออะไรก็ได้ที่คุณต้องการ และอาร์กิวเมนต์ที่ 2 เป็นตัวแปรที่เก็บรูปภาพหลักของฉันซึ่งคุณต้องการแสดง
ทำซ้ำขั้นตอนในทำนองเดียวกันสำหรับมาสก์
cv2.imshow("เอาท์พุต", มาสก์)
ขั้นตอนที่ 7: ตอนนี้เป็นขั้นตอนสุดท้าย
ในขั้นตอนสุดท้ายนี้ เราจะทำการดึงสีของรถและจอแสดงผล
ฉันได้สร้างผลลัพธ์ชื่อตัวแปรแล้ว อีกครั้งคุณสามารถให้ชื่อที่คุณต้องการ ดังนั้นเราจะใช้ฟังก์ชัน cv2.bitwise_and() ซึ่งเราจะรวมรูปภาพเข้าด้วยกันและสร้างภาพใหม่ และไม่ว่าพิกเซลในรูปภาพทั้งสองจะอยู่ที่ใด จะถือว่าใช่หรือ " 1"
ผลลัพธ์ = cv2.bitwise_and(ปรับขนาด, ปรับขนาด, mask=mask)
- ในการนี้ อาร์กิวเมนต์ที่ 1 จะเป็นภาพลักษณ์ของเรา
- อาร์กิวเมนต์ที่ 2 จะเป็นภาพต้นฉบับของเราด้วย แต่ตามด้วยหน้ากากที่เราสร้างขึ้นก่อนหน้านี้
- และสุดท้ายก็แสดงผลโดยใช้ฟังก์ชัน imshow
เพียงคัดลอกวางขั้นตอนสุดท้ายนี้เป็นเพียงการหน่วงเวลาและคุณสามารถออกจากหน้าต่างผลลัพธ์ได้โดยกด " a " บนแป้นพิมพ์