สารบัญ:

การตรวจจับสีใน Python โดยใช้ OpenCV: 8 ขั้นตอน
การตรวจจับสีใน Python โดยใช้ OpenCV: 8 ขั้นตอน

วีดีโอ: การตรวจจับสีใน Python โดยใช้ OpenCV: 8 ขั้นตอน

วีดีโอ: การตรวจจับสีใน Python โดยใช้ OpenCV: 8 ขั้นตอน
วีดีโอ: ตรวจจับสี Python และ OpenCV (Color Detection) 2024, กรกฎาคม
Anonim
Image
Image

สวัสดี! คำแนะนำนี้ใช้เพื่อแนะนำวิธีการแยกสีเฉพาะจากรูปภาพใน 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

การสร้าง TrackBars สำหรับ Hue, Saturation และ Value
การสร้าง TrackBars สำหรับ Hue, Saturation และ Value
การสร้าง TrackBars สำหรับ Hue, Saturation และ Value
การสร้าง 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 " บนแป้นพิมพ์

ขั้นตอนที่ 8: ผลลัพธ์สุดท้าย

แนะนำ: