ዝርዝር ሁኔታ:

Opencv የነገር መከታተያ -3 ደረጃዎች
Opencv የነገር መከታተያ -3 ደረጃዎች

ቪዲዮ: Opencv የነገር መከታተያ -3 ደረጃዎች

ቪዲዮ: Opencv የነገር መከታተያ -3 ደረጃዎች
ቪዲዮ: OpenCV Course - Full Tutorial with Python 2024, ህዳር
Anonim
Opencv የነገር ክትትል
Opencv የነገር ክትትል

የሚንቀሳቀስ ነገር መለየት በኮምፒተር እይታ እና በምስል ሂደት ውስጥ ጥቅም ላይ የሚውል ዘዴ ነው። ማንኛውም ተንቀሳቃሽ ነገር ተገኝቶ እንደሆነ ለማወቅ ከቪዲዮ ብዙ ተከታታይ ክፈፎች በተለያዩ ዘዴዎች ተነጻጽረዋል።

ተንቀሳቃሽ ነገሮችን መለየት ለቪዲዮ ክትትል ፣ የእንቅስቃሴ ማወቂያ ፣ የመንገድ ሁኔታ ክትትል ፣ ለአየር ማረፊያ ደህንነት ፣ በባህር ድንበር ላይ ጥበቃን ለመከታተል እና ለመሳሰሉት ሰፊ መተግበሪያዎች ጥቅም ላይ ውሏል።

የሚንቀሳቀስ ነገርን መለየት የሚንቀሳቀሰው የአንድን ነገር አካላዊ እንቅስቃሴ በአንድ በተወሰነ ቦታ ወይም ክልል ውስጥ ማወቅ ነው። [2] በሚንቀሳቀሱ ዕቃዎች እና የማይንቀሳቀሱ አካባቢዎች ወይም ክልል መካከል ክፍፍልን በመሥራት ፣ የሚንቀሳቀሱ ዕቃዎች እንቅስቃሴ ክትትል ሊደረግበት እና በኋላ ሊተነተን ይችላል። ይህንን ለማሳካት ፣ አንድ ቪዲዮ በአንድ ክፈፎች ላይ የተገነባ መዋቅር ነው ፣ የነገሮችን ማንቀሳቀስ በእያንዲንደ የቪዲዮ ክፈፍ ውስጥ ወይም የሚንቀሳቀስ ዒላማው በቪዲዮው ውስጥ የመጀመሪያውን ገጽታ በሚያሳይበት ጊዜ ብቻ የፊት ተጓዥ ግቦችን (ቶች) ማግኘት ነው።

ቀለሙን መሠረት በማድረግ ዕቃዎቹን ለመለየት እና ለመከታተል የኦፕኔቭ እና የፓይዘን ጥምረት እጠቀማለሁ

ደረጃ 1 - በሚታወቀው ነገር ላይ አራት ማእዘን መሳል

ፒሲዎ ፓይዘን ወይም ኦፕንቪቭ ከሌለው እባክዎን ይህንን ከዚህ በታች የማይገነቡትን ይከተሉ

የፓይዘን ኮድ እዚህ አለ

አስገባ cv2import numpy እንደ np

cap = cv2. VideoCapture (0)

እውነት እያለ ፦

_ ፣ ፍሬም = ካፕ።

Lower_yellow = np.array ([20, 110, 110])

የላይኛው_ቢጫ = 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.

cv2.imshow ("ክትትል" ፣ ፍሬም)

k = cv2.waitKey (5) እና 0XFF

ከሆነ k == 27: ይሰብሩ

cv2. DestroyAllWindow ()

ካፕ። መልቀቅ ()

ደረጃ 2 - ነገሩ የተዛባበትን መንገድ ይፈልጉ

ዱካውን ለመከታተል;

ለ እኔ በክልል (1 ፣ ሌን (center_points)): b = random.randint (230 ፣ 255) g = random.randint (100 ፣ 255) r = random.randint (100 ፣ 255) ሂሳብ.sqrt ከሆነ ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ፍሬም ፣ የመሃል_ ነጥቦች [i - 1] ፣ የመሃል ነጥቦች ፣ (ለ ፣ g ፣ r) ፣ 4)

ደረጃ 3 ሁለቱንም ኮዶች ማዋሃድ

ሁለቱንም ኮዱን ላዋህደው ነው

አስመጣ cv2import numpy እንደ np ከውጭ በዘፈቀደ ከስብስቦች ማስመጣት deque

cap = cv2. VideoCapture (1)

# ነገር የተጎበኘበትን ሁሉንም ነጥብ ለመከታተል ማዕከል_ ነጥቦች = deque ()

እውነት እያለ ፦

# ክፈፉን ያንብቡ እና ያንሸራትቱ ፣ ፍሬም = ካፕ።

# ክፈፉን ትንሽ ያደበዝዙ

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 ፣ bottom_blue ፣ upper_blue)

# ሞላላ ክርን ያድርጉ

ከርነል = cv2.getStructuringElement (cv2. MORPH_ELLIPSE ፣ (15 ፣ 15))

# የመክፈቻ ሞርፍ (የአፈር መሸርሸር ተከትሎ መስፋፋት)

ጭንብል = cv2.morphologyEx (ጭምብል ፣ cv2. MORPH_OPEN ፣ ከርነል)

# ሁሉንም ቅርጾች ይፈልጉ

ቅርጾች ፣ ተዋረድ = cv2.findContours (mask.copy () ፣ cv2. RETR_LIST ፣ cv2. CHAIN_APPROX_SIMPLE) [-2:]

ሌን (ኮንቱር)> 0 ከሆነ

# ትልቁን ኮንቱር ትልቁን_ኮንቱር = ከፍተኛ (ኮንቱር ፣ ቁልፍ = cv2.contourArea) ያግኙ

# የኮንቱር ማእከልን ይፈልጉ እና የተሞላ ክበብ ይሳሉ

አፍታዎች = cv2.moments (ትልቁ_ኮንቱር) centre_of_contour = (int (አፍታዎች ['m10'] / አፍታዎች ['m00']) ፣ int (አፍታዎች ['m01'] / አፍታዎች ['m00'])) cv2. ክብ (ፍሬም) ፣ ማእከል_ኮንቱር ፣ 5 ፣ (0 ፣ 0 ፣ 255) ፣ -1)

# ኮንቱሩን በክበብ ያስሩ

ellipse = cv2.fitEllipse (ትልቁ_ኮንቱር) cv2.ellipse (ፍሬም ፣ ኤሊፕስ ፣ (0 ፣ 255 ፣ 255) ፣ 2)

መከታተያ መስመርን እንሳልፍ ዘንድ # የኮንቱር ማእከልን ይቆጥቡ

የመሃል_ ነጥቦች.አፕendleft (ማእከል_ኮንቱር)

# ከኮንቱር ማዕከላዊ ነጥቦች መስመር ይሳሉ

ለ እኔ በክልል (1 ፣ ሌን (center_points)): b = random.randint (230 ፣ 255) g = random.randint (100 ፣ 255) r = random.randint (100 ፣ 255) ሂሳብ.sqrt ከሆነ ((((center_points [i - 1] [0] - center_points [0]) ** 2) + ((center_points [i - 1] [1] - center_points [1]) ** 2)) <= 50: cv2.line (ፍሬም ፣ የመሃል_ ነጥቦች [i - 1] ፣ የመሃል ነጥቦች ፣ (ለ ፣ g ፣ r) ፣ 4)

cv2. ማሳያ ('ኦሪጅናል' ፣ ፍሬም)

cv2.imshow ('ጭንብል' ፣ ጭንብል)

k = cv2.waitKey (5) እና 0xFF

ከሆነ k == 27: ይሰብሩ

cv2. DestroyAllWindow ()

ካፕ። መልቀቅ ()

የሚመከር: