สารบัญ:
- ขั้นตอนที่ 1: วาดรูปสี่เหลี่ยมผืนผ้าบนวัตถุที่รู้จัก
- ขั้นตอนที่ 2: ติดตามเส้นทางที่วัตถุถูกเคลื่อนย้าย
- ขั้นตอนที่ 3: การรวมรหัสทั้งสองเข้าด้วยกัน
วีดีโอ: การติดตามวัตถุ Opencv: 3 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:03
การตรวจจับวัตถุเคลื่อนที่เป็นเทคนิคที่ใช้ในการมองเห็นด้วยคอมพิวเตอร์และการประมวลผลภาพ เฟรมที่ต่อเนื่องกันหลายเฟรมจากวิดีโอจะถูกเปรียบเทียบโดยวิธีต่างๆ เพื่อตรวจสอบว่าตรวจพบวัตถุที่เคลื่อนไหวหรือไม่
การตรวจจับวัตถุเคลื่อนที่ถูกนำมาใช้กับแอพพลิเคชั่นที่หลากหลาย เช่น การเฝ้าระวังวิดีโอ การจดจำกิจกรรม การตรวจสอบสภาพถนน ความปลอดภัยของสนามบิน การตรวจสอบการป้องกันตามแนวชายแดนทางทะเล และอื่นๆ
การตรวจจับวัตถุเคลื่อนที่คือการจดจำการเคลื่อนไหวทางกายภาพของวัตถุในสถานที่หรือภูมิภาคที่กำหนด[2] โดยการแบ่งส่วนระหว่างวัตถุที่เคลื่อนที่และพื้นที่หรือบริเวณที่อยู่กับที่ การเคลื่อนที่ของวัตถุเคลื่อนที่สามารถติดตามได้และจึงสามารถวิเคราะห์ได้ในภายหลัง เพื่อให้บรรลุสิ่งนี้ ให้พิจารณาว่าวิดีโอเป็นโครงสร้างที่สร้างขึ้นจากเฟรมเดียว การตรวจจับวัตถุเคลื่อนที่คือการค้นหาเป้าหมายที่เคลื่อนที่ในเบื้องหน้า ไม่ว่าจะอยู่ในเฟรมวิดีโอแต่ละเฟรมหรือเฉพาะเมื่อเป้าหมายที่เคลื่อนที่แสดงการปรากฏตัวครั้งแรกในวิดีโอ
ฉันจะใช้ชุดค่าผสม Opnecv และ Python เพื่อตรวจจับและติดตามวัตถุตามสี
ขั้นตอนที่ 1: วาดรูปสี่เหลี่ยมผืนผ้าบนวัตถุที่รู้จัก
หากพีซีของคุณไม่มี python หรือ opencv โปรดปฏิบัติตามคำแนะนำด้านล่างนี้
นี่คือรหัสหลาม:
นำเข้า cv2import numpy เป็น np
หมวก = cv2. VideoCapture(0)
ในขณะที่จริง:
_, frame = cap.read() hsv = cv2.cvtColor(frame, cv2. COLOR_BGR2HSV)
lower_yellow = np.array([20, 110, 110])
upper_yellow = np.array([40, 255, 255])
yellow_mask = cv2.inRange (hsv, lower_yellow, upper_yellow)
(_, รูปร่าง, _) = cv2.findContours(yellow_mask, cv2. RETR_TREE, cv2. CHAIN_APPROX_SIMPLE)
สำหรับรูปร่างในรูปทรง:
พื้นที่ = cv2.contourArea(รูปร่าง)
ถ้า (พื้นที่ > 800):
x, y, w, h = cv2.boundingRect(contour) frame = cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 0, 255), 10)
cv2.imshow("การติดตาม", เฟรม)
k = cv2.waitKey(5) & 0XFF
ถ้า k == 27: แตก
cv2.destroyAllWindows()
หมวกปล่อย ()
ขั้นตอนที่ 2: ติดตามเส้นทางที่วัตถุถูกเคลื่อนย้าย
เพื่อติดตามเส้นทาง:
สำหรับฉันอยู่ในช่วง (1, len (center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) ถ้า math.sqrt(((center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line(เฟรม, center_points[i - 1], center_points, (b, g, r), 4)
ขั้นตอนที่ 3: การรวมรหัสทั้งสองเข้าด้วยกัน
ฉันจะรวมรหัสทั้งสองเข้าด้วยกัน
นำเข้า cv2import numpy เป็น np นำเข้าแบบสุ่มจากคอลเลกชันนำเข้า deque
หมวก = cv2. VideoCapture(1)
# เพื่อติดตามทุกจุดที่วัตถุเยี่ยมชม center_points = deque ()
ในขณะที่จริง:
# อ่านและพลิกเฟรม _, เฟรม = cap.read () เฟรม = cv2.flip (เฟรม 1)
#เบลอกรอบหน่อย
blur_frame = cv2. GaussianBlur(เฟรม, (7, 7), 0)
# แปลงจากรูปแบบสี BGR เป็น HSV
hsv = cv2.cvtColor(blur_frame, cv2. COLOR_BGR2HSV)
# กำหนดช่วงสี hsv ล่างและบนเพื่อตรวจจับ สีฟ้าที่นี่
lower_blue = np.array ([100, 50, 50]) upper_blue = np.array ([140, 255, 255)) หน้ากาก = cv2.inRange (hsv, lower_blue, upper_blue)
# ทำเคอร์เนลวงรี
เคอร์เนล = cv2.getStructuringElement(cv2. MORPH_ELLIPSE, (15, 15))
# เปิด morph (การกัดเซาะตามด้วยการขยาย)
หน้ากาก = cv2.morphologyEx (หน้ากาก cv2. MORPH_OPEN เคอร์เนล)
# ค้นหารูปทรงทั้งหมด
รูปร่าง ลำดับชั้น = cv2.findContours(mask.copy(), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE)[-2:]
ถ้าเลน (รูปร่าง) > 0:
# ค้นหาที่ใหญ่ที่สุดของรูปร่างที่ใหญ่ที่สุด_contour = สูงสุด (รูปร่าง, คีย์=cv2.contourArea)
# ค้นหาจุดศูนย์กลางของรูปร่างแล้ววาดวงกลมที่เติม
ช่วงเวลา = cv2.moments(biggest_contour) centre_of_contour = (int(ช่วงเวลา['m10'] / ช่วงเวลา['m00']), int(ช่วงเวลา['m01'] / ช่วงเวลา['m00'])) cv2.circle(เฟรม, center_of_contour, 5, (0, 0, 255), -1)
# ล้อมรอบรูปร่างด้วยวงกลม
ellipse = cv2.fitEllipse(biggest_contour) cv2.ellipse(เฟรม, วงรี, (0, 255, 255), 2)
# บันทึกจุดกึ่งกลางของรูปร่างเพื่อให้เราวาดเส้นติดตาม
center_points.appendleft(centre_of_contour)
# ลากเส้นจากจุดศูนย์กลางของรูปร่าง
สำหรับฉันอยู่ในช่วง (1, len (center_points)): b = random.randint(230, 255) g = random.randint(100, 255) r = random.randint(100, 255) ถ้า math.sqrt(((center_points[i - 1][0] - center_points[0]) ** 2) + ((center_points[i - 1][1] - center_points[1]) ** 2)) <= 50: cv2.line(เฟรม, center_points[i - 1], center_points, (b, g, r), 4)
cv2.imshow('ต้นฉบับ', เฟรม)
cv2.imshow('หน้ากาก', หน้ากาก)
k = cv2.waitKey(5) & 0xFF
ถ้า k == 27: แตก
cv2.destroyAllWindows()
หมวกปล่อย ()
แนะนำ:
เครื่องสแกนโค้ด QR โดยใช้ OpenCV ใน Python: 7 ขั้นตอน
เครื่องสแกนรหัส QR การใช้ OpenCV ใน Python: ในโลกปัจจุบันนี้ เราเห็นรหัส QR และบาร์โค้ดถูกใช้เกือบทุกที่ตั้งแต่บรรจุภัณฑ์ของผลิตภัณฑ์ไปจนถึงการชำระเงินออนไลน์ และทุกวันนี้ เราเห็นรหัส QR แม้แต่ในร้านอาหารเพื่อดูเมนู ดังนั้นไม่ สงสัยว่าตอนนี้เป็นความคิดที่ยิ่งใหญ่ แต่เคยไหม
Rubik's Cube Blindfolded Solver แบบเรียลไทม์โดยใช้ Raspberry Pi และ OpenCV: 4 ขั้นตอน
Rubik's Cube Blindfolded Solver แบบเรียลไทม์โดยใช้ Raspberry Pi และ OpenCV: นี่เป็นเครื่องมือคิวบ์รูบิครุ่นที่ 2 ที่สร้างขึ้นสำหรับการแก้ผ้าปิดตา เวอร์ชันที่ 1 ได้รับการพัฒนาโดย javascript คุณสามารถเห็นโปรเจ็กต์ RubiksCubeBlindfolded1 ซึ่งต่างจากเวอร์ชันก่อนหน้า เวอร์ชันนี้ใช้ไลบรารี OpenCV เพื่อตรวจจับสีและเ
Micro:bit MU Vision Sensor - การติดตามวัตถุ: 7 ขั้นตอน
Micro:bit MU Vision Sensor - การติดตามวัตถุ: ดังนั้นในคำแนะนำนี้เราจะเริ่มเขียนโปรแกรม Smart Car ที่เราสร้างในคำแนะนำนี้และเราติดตั้งเซ็นเซอร์วิชันซิสเต็ม MU ในคำแนะนำนี้ เราจะตั้งโปรแกรมไมโคร: บิตด้วยการติดตามวัตถุง่ายๆ ดังนั้น th
Micro:bit MU Vision Sensor - การติดตามวัตถุ: 6 ขั้นตอน
Micro:bit MU Vision Sensor - การติดตามวัตถุ: นี่เป็นแนวทางที่สี่ของฉันเกี่ยวกับเซ็นเซอร์วิชัน MU สำหรับ micro:bit ฉันจะอธิบายวิธีการติดตามวัตถุด้วย micro:bit และเขียนพิกัดไปยังหน้าจอ OLED ฉันมีคำแนะนำอื่นๆ เกี่ยวกับวิธีการเชื่อมต่อ micro:bit กับ
การติดตามวัตถุ - การควบคุมการยึดกล้อง: 4 ขั้นตอน
การติดตามวัตถุ - การควบคุมการยึดกล้อง: สวัสดีทุกคน ในคำแนะนำนี้ ฉันจะแสดงให้คุณเห็นความคืบหน้าสำหรับโครงการติดตามวัตถุของฉัน ที่นี่คุณสามารถค้นหาคำแนะนำก่อนหน้า: https://www.instructables.com/id/Object-Tracking/ และที่นี่คุณสามารถค้นหาเพลย์ลิสต์ youtube ที่มีท