สารบัญ:

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

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

วีดีโอ: การตรวจจับสีอย่างง่ายโดยใช้ OpenCV: 6 ขั้นตอน
วีดีโอ: ตรวจจับสี Python และ OpenCV (Color Detection) 2024, พฤศจิกายน
Anonim
การตรวจจับสีอย่างง่ายโดยใช้ OpenCV
การตรวจจับสีอย่างง่ายโดยใช้ OpenCV

สวัสดี! วันนี้ผมจะแสดงวิธีง่ายๆ ในการตรวจจับสีจากวิดีโอสดโดยใช้ OpenCV และ python

โดยทั่วไปฉันจะทดสอบว่าสีที่ต้องการมีอยู่ในเฟรมพื้นหลังหรือไม่และโดยใช้โมดูล OpenCV ฉันจะปิดบังพื้นที่นั้นและแสดงเฟรมพร้อมกัน

ขั้นตอนที่ 1: ไฟล์ส่วนหัว

ไฟล์ส่วนหัว
ไฟล์ส่วนหัว

ตอนนี้ฉันใช้ไฟล์ส่วนหัวสองไฟล์คือ cv2 และ NumPy โดยทั่วไป cv2 คือไลบรารี OpenCV ซึ่งโหลดไฟล์ c++ ทั้งหมดที่สำคัญในขณะที่ใช้คำสั่งในโค้ด (มีคำจำกัดความทั้งหมด)

และ Numpy เป็นไลบรารี่หลามที่จำเป็นสำหรับการจัดเก็บอาร์เรย์หลายมิติ เราจะใช้เก็บพิกัดช่วงสีของเรา

และ numpy เนื่องจาก np ช่วยให้โค้ดของเราสั้นลงเล็กน้อยโดยใช้ np ทุกครั้งแทนที่จะเป็น numpy

ขั้นตอนที่ 2: จับภาพวิดีโอ

ถ่ายวิดีโอ
ถ่ายวิดีโอ

มันค่อนข้างง่ายในขณะที่ใช้ python ที่นี่เราเพียงแค่ต้องเปิดเครื่องบันทึกวิดีโอเพื่อให้สามารถเริ่มบันทึกเฟรมได้

ตอนนี้ค่าใน VideoCapture บ่งชี้กล้อง ในกรณีของฉัน กล้องเชื่อมต่อกับแล็ปท็อปของฉัน ดังนั้น 0

คุณสามารถไปได้เช่นเดียวกับ 1 สำหรับกล้องรองเป็นต้น VideoCapture สร้างวัตถุสำหรับมัน

ขั้นตอนที่ 3: จับเฟรมและกำหนดสี

จับเฟรมและกำหนดสี
จับเฟรมและกำหนดสี

ตอนนี้เราต้องทำอะไรบางอย่างเพื่อให้เราสามารถจับภาพเฟรมทันทีของวิดีโอ ซึ่งจะช่วยให้เราแยกภาพออกและเราสามารถทำงานตามความต้องการได้

ลูป "while" จะช่วยให้เรารันลูปตามเวลาที่ต้องการได้ ตอนนี้ใช้ " _, frame = cap.read() " เพื่อตรวจสอบความถูกต้องของ Frame ที่จับภาพและจัดเก็บไว้ "cap.read() เป็นตัวแปรบูลีนและคืนค่า จริง หากเฟรมอ่านถูกต้อง และหากคุณไม่มีเฟรม มันจะไม่แสดงข้อผิดพลาดใดๆ เลย คุณก็จะได้รับไม่มี

ตอนนี้บรรทัดที่ 11 และบรรทัดที่ 12 กำหนดช่วงของสีที่เราจำเป็นต้องตรวจจับโดยพื้นฐานแล้ว สำหรับสิ่งนี้ฉันเคยชินกับสีน้ำเงิน

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

สำหรับสิ่งนี้ ฉันได้กำหนดตัวแปรสองตัวที่จัดเก็บค่า BGR ที่ต่ำกว่าและค่า BGR ระดับบน

ขั้นตอนที่ 4: การกำบังและการแยกออก

มาส์กและสกัด
มาส์กและสกัด

งานหลักของการปิดบังเฟรมและการแยกสีของเฟรมมาถึงแล้ว ฉันใช้คำสั่งที่กำหนดไว้ล่วงหน้าที่มีอยู่ในไลบรารีใน OpenCV เพื่อทำการกำบัง โดยพื้นฐานแล้ว การมาสก์เป็นกระบวนการในการลบบางส่วนของเฟรมออก กล่าวคือ เราจะลบพิกเซลที่มีค่า BGR สีที่ไม่อยู่ในช่วงสีที่กำหนด และทำได้โดย cv2.inRange หลังจากนั้น เราใช้ช่วงสีกับรูปภาพที่ถูกปิดบังโดยขึ้นอยู่กับค่าพิกเซล และสำหรับสิ่งนี้ เราจะใช้ cv2.bitwise_and มันจะกำหนดสีให้กับพื้นที่ที่ถูกปกปิดโดยขึ้นอยู่กับค่ามาสก์และช่วงสี

ลิงค์สำหรับ cv2 bitwise_and:

ขั้นตอนที่ 5: ในที่สุดก็แสดง

ในที่สุดก็แสดง!
ในที่สุดก็แสดง!

ที่นี่ฉันได้ใช้ cv2.imshow() พื้นฐานสำหรับการแสดงแต่ละเฟรมเป็นรูปภาพ เนื่องจากฉันมีข้อมูลเฟรมที่เก็บไว้ในตัวแปร ฉันจึงสามารถดึงข้อมูลเหล่านั้นใน imshow() ที่นี่ฉันได้แสดงทั้งสามเฟรม ต้นฉบับ มาสก์ และสี

ตอนนี้เราต้องออกจากลูป while สำหรับสิ่งนี้ เราสามารถใช้ cv2.wait. Key() ได้ง่ายๆ โดยทั่วไปจะบอกเวลารอก่อนที่จะตอบสนอง ดังนั้นหากคุณผ่าน 0 มันจะรออย่างไม่สิ้นสุดและ 0xFF บอกว่าสถาปัตยกรรมเป็น 64 บิต " ord() " ระบุอักขระที่เมื่อกดจะรันคำสั่ง break in if block และมันจะออกมาจากลูป

จากนั้น cap.release() จะปิดเครื่องบันทึกวิดีโอและ cv2.destroyAllWindows() จะปิดหน้าต่างที่เปิดอยู่ทั้งหมด

หากคุณมีปัญหาใด ๆ โปรดแจ้งให้เราทราบ

ลิงก์ไปยังซอร์สโค้ด:

แนะนำ: