Агуулгын хүснэгт:

Opencv объектын хяналт: 3 алхам
Opencv объектын хяналт: 3 алхам

Видео: Opencv объектын хяналт: 3 алхам

Видео: Opencv объектын хяналт: 3 алхам
Видео: OpenCV Course - Full Tutorial with Python 2024, Арваннэгдүгээр
Anonim
Opencv объектын хяналт
Opencv объектын хяналт

Хөдөлгөөнт объектыг илрүүлэх нь компьютерийн алсын хараа, дүрс боловсруулахад ашигладаг техник юм. Видео бичлэгээс дараалсан олон фрэймийг янз бүрийн аргаар харьцуулж, хөдөлж буй объект илрүүлсэн эсэхийг тодорхойлох боломжтой.

Хөдлөх объект илрүүлэлтийг видео тандалт, үйл ажиллагааг таних, замын нөхцөл байдлын хяналт, нисэх онгоцны буудлын аюулгүй байдал, далайн хил дагуух хамгаалалтын хяналт гэх мэт өргөн хүрээний програмуудад ашигласан болно.

Хөдөлж буй объект илрүүлэлт гэдэг нь тухайн газар, бүс нутаг дахь объектын биет хөдөлгөөнийг таних явдал юм. [2] Хөдөлж буй объектууд болон суурин газар, бүс нутгуудын хооронд сегментчилэл хийснээр хөдөлж буй объектуудын хөдөлгөөнийг хянаж, дараа нь шинжлэх боломжтой болно. Үүнд хүрэхийн тулд видеог нэг хүрээ дээр бүтээсэн бүтэц гэж үзье. Хөдөлгөөнт объектын илрүүлэлт нь видео хүрээ бүрт эсвэл хөдөлж буй зорилт нь видеоны анхны дүр төрхийг харуулах үед л урд талын хөдөлж буй зорилгыг олох явдал юм.

Би Opnecv болон Python хослолыг ашиглан обьектуудыг өнгө дээр үндэслэн илрүүлэх, хянах болно

Алхам 1: Танигдсан объект дээр тэгш өнцөгт зур

Хэрэв таны компьютерт python эсвэл opencv байхгүй бол доорх зааврыг дагана уу

Энд python код байна:

cv2import numpy -ийг np болгон импортлох

cap = cv2. VideoCapture (0)

үнэн байхад:

_, frame = cap.read () hsv = cv2.cvtColor (хүрээ, cv2. COLOR_BGR2HSV)

доод_ шар = np.матриц

дээд шар

yellow_mask = cv2.inRange (hsv, доод_ шар, дээд_шар)

(_, контур, _) = cv2.findContours (шар маск, 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 ()

cap.release ()

Алхам 2: Объект хөдөлж буй замыг хайж олоорой

замыг мөрдөхийн тулд:

i -ийн хувьд (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt (((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2. мөр (хүрээ, төвийн_оноо [i - 1], төвийн_оноо , (b, g, r), 4)

Алхам 3: Хоёр кодыг нэгтгэх

Би хоёуланг нь хоёуланг нь нэгтгэх болно

cv2import numpy -ийг np импортоор цуглуулгаас санамсаргүй байдлаар импортлох

cap = cv2. VideoCapture (1)

# Объект зочилсон бүх цэгийг хянахын тулд center_points = deque ()

үнэн байхад:

# Хүрээг уншиж, эргүүлээрэй _, frame = cap.read () frame = cv2.flip (frame, 1)

# Хүрээг бага зэрэг бүдгэрүүлээрэй

blur_frame = cv2. GaussianBlur (хүрээ, (7, 7), 0)

# BGR -ээс HSV өнгөний формат руу хөрвүүлэх

hsv = cv2.cvtColor (blur_frame, cv2. COLOR_BGR2HSV)

# Илрүүлэхийн тулд hsv өнгөний доод ба дээд хүрээг тодорхойлно уу. Энд цэнхэр

доод_хэнхэр = np.мөрөл ([100, 50, 50]) дээд_хэнхэр = np.мөрөл

# Эллипс цөм хийх

цөм = cv2.getStructuringElement (cv2. MORPH_ELLIPSE, (15, 15))

# Нээлтийн морф (элэгдэл, дараа нь тэлэлт)

маск = cv2.morphologyEx (маск, cv2. MORPH_OPEN, цөм)

# Бүх хэлбэрийг хайж олох

контур, шатлал = cv2.findContours (mask.copy (), cv2. RETR_LIST, cv2. CHAIN_APPROX_SIMPLE) [-2:]

хэрэв len (контур)> 0:

# Хамгийн том контурыг олоорой хамгийн том_контур = хамгийн их (контур, түлхүүр = cv2.contourArea)

# Контурын төвийг олж, дүүрсэн тойрог зур

мөч = cv2.moments (хамгийн том_контур) centre_of_contour = (int (мөч ['m10'] / мөч ['m00']), int (мөч ['m01'] / мөч ['m00'])) cv2. тойрог (хүрээ, centre_of_contour, 5, (0, 0, 255), -1)

# Контурыг дугуйлангаар холбоно уу

эллипс = cv2.fitEllipse (хамгийн том_контур) cv2.ellipse (хүрээ, эллипс, (0, 255, 255), 2)

# Контурын төв хэсгийг хадгалж, бид үүнийг хянах шугам зурдаг

center_points. appendleft (төвийн_нүүр)

# Контурын төв цэгүүдээс шугам зур

i -ийн хувьд (1, len (center_points)): b = random.randint (230, 255) g = random.randint (100, 255) r = random.randint (100, 255) if math.sqrt (((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2. мөр (хүрээ, төвийн_оноо [i - 1], төвийн_оноо , (b, g, r), 4)

cv2.imshow ('анхны', хүрээ)

cv2.imshow ('маск', маск)

k = cv2.waitKey (5) & 0xFF

хэрэв k == 27: завсарлага

cv2.destroyAllWindows ()

cap.release ()

Зөвлөмж болгож буй: