پیدا کردن الگو در تصویر توسط تابع matchTemplate

سلام و عصر بخیر.

   امیدوارم جمعه خوبی داشته باشید. در پست امروز تصمیم دارم نحوه پیدا کردن یک الگو (Pattern) را درون یک تصویر با استفاده از OpenCV و تابع matchTemplate و زبان برنامه نویسی Python را یاد بدهم. برای انجام این کار به دو تصویر نیاز داریم. اول تصویر اصلی که می خواهیم درون آن به جستجو بپردازیم و دوم، تصویری که می خواهیم دنبال آن بگردیم. فرض کنید بخواهیم خرچنگ قرمز رنگی را درون تصویر بالا پیدا کنیم. خب اگر حوصله و وقت کافی دارید بهتره خودتون شروع به گشتن بکنید و شاید یعد از چند ساعت بتونید خرچنگ را پیدا کنید. اما اینجا قصد داریم تا با استفاده از پردازش تصویر، خیلی خیلی راحت تر و سریع تر خرچنگ رو پیدا کنیم. شکل زیر خرچنگ مورد نظر را انشان می دهد. پس بهتره وقت را تلف نکنیم و شروع به نوشتن کد کنیم.

   در ابتدا پکیج های مورد نظر را وارد کنید. دقیقاً مانند کدهای پیشین، numpy برای Numerical processing و cv2 برای OpenCV.

   بعد از این که پکیج ها را فراخوانی کردیم نوبت به بارگذاری تصاویر می رسد. puzzle تصویری است که می خواهیم درون آن را جستجو کنیم و query، تصویر خرچنگی است که قرار است دنبال آن می گردیم.
  در خط بعدی ابعاد تصویر خرچنگ را وارد دو متغیر می کنیم.

   در این قسمت با فراخوانی تابع matchTemplate، عملیات جستجو را آغاز می کنیم. ایت تابع دارای سه پارمتر ورودی است. اولین پارامتر مربوط به تصویر اصلی، دومین پارامتر تصویر خرچنگ و سومین پارامتر متد جستجو است.

   بد نیست که توضیح مختصری در مورد نحوه کار این تابع بدهم. دستور matchTemplate یک پنجره به اندازه ابعاد تصویر query ایجاد می کند و آن را در سراسر تصویر اصلی از بالا-چپ تا پایین-راست حرکت می دهد و هرجایی که بهترین تطبیق را داشته باشد به خروجی می فرستد.

   در مرحله بعدی مختصات نتیجه بدست آمده را با از دستور minMaxLoc بدست می آوریم.

   چون از متد TM_CCOEFF استفاده کرده بودیم، بنابراین مختصات نقطه بالا-چپ، بیشترین مقداری است که تابع minMaxLoc پیدا کرده است. برای پیدا کردن مختصات نقطه پایین-راست، طول و عرض نقطه بالا-چپ را با مختصات تصویر query جمع می کنیم.

   محدوده ای که خرچنگ درون آن پیدا شده است را محاسبه و در متغیر roi تغییره می کنیم.

   پیدا کردن الگو تمام شد. به همین سادگی. حالا بد نیست کمی به جنبه های زیبایی کد بپردازیم و الگوی پیدا شده را بر روی تصویر اصلی نشان بدهیم. برای این کار تمامی تصویر اصلی را تیره می کنیم و فقط محدوده ای که خرچنگ درون آن یافت شده است را روشن تر می کنیم.

   توسط آرایه های np، یک ماسک با ابعاد تصویر اصلی و از نوع uint8 می سازیم.

   سپس آن را با تصویر اصلی و به یک نسبت مشخص جمع می کنیم. برای این کار دستور addWeight مناسب خواهد بود.

   در آخر محدوده خرچنگ را که در متغیر roi ذخیره کرده بودیم را به تصویر اصلی اعمال می کنیم و آن را نمایش می دهیم.

   در پایان و از لینک زیر می توانید کد را به همراه تصاویر نمونه دانلود نمایید. از نرم افزارهای OpenCV 3.0.0 و Python 2.7 برای کدنویسی استفاده شده است.

موفق باشید.

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

Subscribe
Notify of
guest

2 نظرات
Inline Feedbacks
View all comments
عرفان
عرفان
2 years ago

سلام میشه پیدا کردن یک تصویر در ویدیو هم اموزش بدید؟

2
0
Would love your thoughts, please comment.x