در قسمت یازدهم از مجموعه آموزشی پردازش تصویر در پایتون، در رابطه با تشخیص لبهها صحبت کردیم و عملیات لبهیابی را با الگوریتمها و متدهای مختلفی بر روی ویدئویی که از وبکم ضبط کردیم تست کردیم و در نهایت به نمایش گذاشتیم. در این قسمت قصد داریم در مورد الگویابی صحیت کنیم. در ادامه این موضوع را بیشتر تشریح خواهیم کرد.
الگویابی
الگویابی که در اینجا مدنظر ما است یعنی اینکه یک الگوی خاص را در یک تصویر تشخیص بدهیم.
برای این کار ما دو عکس کوچک و بزرگ در نظر میگیریم. عکس کوچک چندین بار در عکس بزرگ تکرار شده است و ما باید تشخیص بدهیم که در کجای عکس بزرگ این الگو تکرار شده است.
در ادامه ما کدی خواهیم نوشت که سکههای که در بازی سوپر ماریو وجود دارد را تشخیص بدهد. پس نتیجه الگویابی میشود پیدا کرد سکهها که همان عکس کوچک میشود در عکس بزرگتر.
به این نکته توجه داشته باشید که با توجه به میزان آستانهای که ما تعیین میکنیم، این تشخیص میتواند متفاوت باشد.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | import cv2 import numpy as np img_bgr = cv2.imread('mario.jpg') img_gray = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2GRAY) img_template = cv2.imread('coin.jpg', 0) w, h = img_template.shape[::-1] res = cv2.matchTemplate(img_gray, img_template, cv2.TM_CCOEFF_NORMED) threshhold = 0.6 loc = np.where(res >= threshhold) for pt in zip(*loc[::-1]): cv2.rectangle(img_bgr, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 1) cv2.imshow('coin', img_bgr) cv2.waitKey(0) |
پس از اینکه برنامهی بالا را اجرا کردیم، خروجی برنامه به صورت زیر خواهد بود و سکهها دقیا تشخیص داده خواهند شد.