


فهرست محتوا
Toggleبرای پاسخ به سوال اینکه OpenCV چیست؟ اجازه دهید ابتدا بینایی کامپیوتر را مورد بررسی قرار دهیم. بینایی کامپیوتر فرآیندی است که از طریق آن ما میتوانیم توسط کامپیوتر درکی از تصاویر و فیلمها داشته باشیم. اینکه آنها چگونه ذخیرهشدهاند و ما چطور میتوانیم دادهها را دریافت و آنها را دستکاری کنیم. بینایی کامپیوتر اساس و یا بهصورت گستردهای در هوش مصنوعی مورداستفاده قرار میگیرد. بینایی کامپیوتر نقش به سزایی در خودروهای خودران، روباتیک و همچنین در برنامههای اصلاح تصویر دارد. یکی از کتابخانههای مورداستفاده در حوزه بینایی کامپیوتر OpenCV است.
OpenCV کتابخانهای عظیم و متنباز برای بینایی کامپیوتر، یادگیری ماشین و پردازش تصویر است که اکنون نقش اصلی را در انجام عملیات به لحظه در سامانهها ایفا میکند. بدینوسیله میتوان تصاویر و فیلمها را برای تشخیص اشیا، چهره یا دست خط مورد پردازش قرارداد. OpenCV با کتابخانههای متنوعی مانند Numpy یکپارچه میشود. کتابخانههای پایتون قادر هستند تا ساختار آرایههای OpenCV را مورد تجزیهوتحلیل قرار دهند. بهمنظور تشخیص الگوی تصویر و ویژگیهای متفاوت ما از فضای وکتور و عملیات ریاضی بر روی ویژگیها استفاده میکنیم.
نسخه ۱.۰ از OpenCV تحت گواهی BSD صادر شد که برای هر دو کاربرد دانشگاهی و تجاری رایگان است. OpenCV دارای پشتیبانی از زبانهای C++، C، پایتون و جاوا اسکریپت است و از سیستمعاملهای ویندوز، لینوکس، مک، iOS و اندروید پشتیبانی میکند. OpenCV طراحیشده است تا تمرکز اصلی آن بر روی برنامههای به لحظه (بلادرنگ) و پردازش مؤثر باشد. همهچیز تحت زبان C/C++ بهینهشده برای برخورداری از پردازش چندهستهای است.

از تصویر اصلی بالا، دادههای بسیاری میتواند استخراج نمود. مانند تعداد پا، نوع مجسمه، چهره و …
OpenCV در سال ۱۹۹۹ توسط گری برادسکی در اینتل متولد شد. نخستین نسخه OpenCV در سال ۲۰۰۰ منتشر شد. وادیم به گری برای مدیریت تیم روسی نرمافزار OpenCV ملحق شد. OpenCV در سال ۲۰۰۵ در پروژه خودرو Stanley به کار برده شد؛ جایی که توانست جایزه رقابت DARPA Grand را از آن خود کند. سپس توسعه OpenCV تحت نظر ویلو گاراج و گری برادسکی و وادیم پیساروسکی ادامه یافت. هماکنون OpenCV الگوریتمهای مختلفی در حوزه بینایی کامپیوتر و یادگیری ماشین پشتیبانی میکند و روزبهروز بر گستره آن افزوده میشود.
مسئلههای زیادی است که میتوان آنها را توسط OpenCV حل نمود. بعضی از آنها در زیر فهرست شدهاند:
OpenCV فقط یک کتابخانه پردازش تصویر نیست؛ یک ارتش کامل از الگوریتمهای ریاضی و هوش مصنوعی است. از فیلترهای ساده اینستاگرامی گرفته تا دیدن در تاریکی مطلق توسط دوربینهای حرارتی. در این بخش، ۱۰ ابرقدرت OpenCV را معرفی میکنیم که شما را از یک کدنویس ساده به یک متخصص بینایی کامپیوتر تبدیل میکند.
سادهترین شکل بینایی ماشین! تصور کنید یک ذرهبین دارید و به کامپیوتر میگویید یک تصویر کوچک (مثلاً لوگوی یک برند) را در یک تصویر بزرگ (مثلاً عکس یک مسابقه فوتبال) پیدا کند. OpenCV با توابعی مثل این کار را در کسری از ثانیه انجام میدهد.
کاربرد شگفتانگیز:
کنترل کیفیت در کارخانه: پیدا کردن یک پیچ معیوب روی برد الکترونیکی.
رباتهای انبارداری: پیدا کردن بارکد یا کیوآر کد روی بستهها برای مرتبسازی خودکار.
این فقط پیدا کردن صورت نیست، بلکه درک آن است! OpenCV با استفاده از Haar Cascades (روش کلاسیک و سریع) یا مدلهای Deep Learning (دقیق)، میتواند ۶۸ نقطه کلیدی مثل نوک بینی، گوشه چشمها و خط لبها را شناسایی کند.
کاربرد شگفتانگیز:
خوابآلودگی راننده: با ردیابی پلکها، اگر چشمها بسته بمانند، آژیر خطر به صدا در میآید.
فیلترهای اسنپچت: عینک یا گوش خرگوشی که دقیقاً روی صورت میچسبد.
تست آرایش مجازی: ماتیک زدن بهصورت دیجیتالی در فروشگاههای آنلاین.
تفاوتش با تشخیص چهره چیست؟ تشخیص میگوید «این یک توپ است» (Single Frame). اما ردیابی میگوید «این همان توپی است که یک ثانیه پیش اینجا بود» (Sequence of Frames). الگوریتمهای KCF، MIL و CSRT در OpenCV، سوژه را حتی اگر پشت یک مانع پنهان شود، تعقیب میکنند.
کاربرد شگفتانگیز:
سیستمهای نظارتی هوشمند: دنبال کردن یک فرد مشکوک در بین دوربینهای مختلف یک فروشگاه.
تحلیل ورزشی: دنبال کردن یک بازیکن خاص و رسم نقشه حرارتی حرکت او در زمین.
هنر تبدیل عکس به یک نقاشی مدادی! الگوریتم Canny در OpenCV، پیکسلهایی که شدت روشناییشان ناگهان تغییر میکند را پیدا میکند و مرز بین اشیا را ترسیم میکند. نتیجه یک تصویر سیاه و سفید زیبا و پر از خطوط است.
کاربرد شگفتانگیز:
خودروهای خودران: تشخیص خطوط خیابان (Lane Detection) حیاتیترین وظیفه است. تنها چیزهایی که مهم هستند، لبههای جادهاند.
اسکنرهای پزشکی: پیدا کردن مرز یک تومور در تصاویر MRI.
طراحی صنعتی: اسکن یک خودکار و تبدیل خودکار عکس آن به نقشه اتوکد (CAD).
وقتی لبهها را پیدا کردیم، حالا میخواهیم «شکلهای بسته» را جدا کنیم. OpenCV با تابع ، یک لکه سبز را از پسزمینه جدا میکند و محیط، مساحت و مرکز هندسی آن را به ما میگوید.
کاربرد شگفتانگیز:
شمارش سلولهای خونی: جدا کردن گلبولهای قرمز از هم.
تشخیص پول تقلبی: بررسی دقیق شکل و اندازه هولوگرامهای روی اسکناس.
واقعیت افزوده (AR): تشخیص سطح میز برای قرار دادن یک شیء سهبعدی مجازی.
یا «جادوی اسکنر جیبی!» حتماً از یک سند با زاویه کج عکس گرفتهاید. OpenCV میتواند با پیدا کردن ۴ گوشه مستطیل، تصویر را از نمای اُریب به نمای «روبهرو» تبدیل کند. انگار که با یک اسکنر رومیزی کار کردهاید.
کاربرد شگفتانگیز:
اسکنر دوربین موبایل (CamScanner): برنامههایی که از سند عکس میگیرند و آن را صاف میکنند.
کمک داور ویدئویی (VAR): تشخیص آفساید با تبدیل خطوط زمین فوتبال به یک شبکه مسطح ریاضی.
اگر دوربین ثابت باشد، OpenCV میتواند «تصویر پسزمینه خالی» را حفظ کند و هر چیزی که جدیداً وارد صحنه شده را هایلایت نماید. این کار با الگوریتمهای MOG2 و KNN انجام میشود.
کاربرد شگفتانگیز:
حذف گرین اسکرین بدون گرین اسکرین: در زوم و گوگل میت، لازم نیست پشت سرتان پارچه سبز باشد؛ OpenCV میتواند شما را از اتاق شلوغتان جدا کند.
تشخیص نفوذ: حصارکشی مجازی دور یک ملک که با ورود یک حیوان یا انسان هشدار بدهد.
چشم چپ و راست انسان، هرکدام یک تصویر میبینند و مغز ما «اختلاف منظر» (Disparity) را محاسبه میکند. OpenCV همین کار را با دو دوربین انجام میدهد و یک نقشه عمق (نقشه سهبعدی) تولید میکند. اشیای نزدیک سفیدتر و اشیای دور سیاهتر دیده میشوند.
کاربرد شگفتانگیز:
پهپادهای خودران: جلوگیری از برخورد با موانعی که «لیزری» دیده نمیشوند (مثل کابل برق).
چاپ سهبعدی: اسکن یک مجسمه واقعی و تبدیل آن به فایل stl.
ردیابی «بردارهای سرعت» تکتک پیکسلها. بر خلاف ردیابی اشیا که یک جعبه رسم میکند، Optical Flow مسیر حرکت هر قطره باران روی شیشه ماشین را دنبال میکند. جادوی این قابلیت در تشخیص «جهت حرکت» است.
کاربرد شگفتانگیز:
فشردهسازی ویدئو (کدکها): فقط پیکسلهایی که حرکت کردهاند دوباره ذخیره میشوند.
تشخیص ژست حرکتی: عقب و جلو بردن دست برای کم و زیاد کردن صدای تلویزیون بدون لمس.
این قابلیت، OpenCV را از یک کتابخانه قدیمی به یک هیولای هوش مصنوعی تبدیل کرده است. شما میتوانید مدلهای آموزشدیده شده با TensorFlow، PyTorch و Caffe را مستقیماً با در OpenCV بارگذاری و اجرا کنید. این یعنی بینایی کامپیوتری کلاسیک و یادگیری عمیق در یک جا!
کاربرد شگفتانگیز:
شناسایی اشیا با YOLO در لحظه: اجرای مدل YOLOv8 در OpenCV برای دیدن «میز، لپتاپ، انسان…» در وبکم با سرعت ۶۰ فریم بر ثانیه.
تبدیل عکس سیاهسفید به رنگی: بارگذاری یک مدل Colorization و تماشای رنگ گرفتن عکسهای قدیمی.
تولید تصاویر هنری: اجرای مدلهای Neural Style Transfer برای ادغام سبک ون گوگ با عکس پروفایلتان.
پردازش تصویر روشی برای اجرای عملیات مخصوص بر روی تصویر بهمنظور دریافت تصویر بهینهشده و یا استخراج اطلاعات مفید از تصویر است. اگر ما درباره اساس تعریفی پردازش تصویر صحبت کنیم. پس پردازش تصویر عبارت از آنالیز و دستکاری تصویر دیجیتال، مخصوصاً برای دستیابی به کیفیت بالاتر است.
ازآنجاییکه تصویر ممکن است توسط تابع دوبعدی f(x, y) تعریف شود. جایی که x و y مختصات فضایی تصویر هستند و دامنه هر جفت نقطه (x, y) ، شدت یا سطح خاکستری آن نقطه از تصویر نامیده میشود.
بهعبارتدیگر یک تصویر چیزی فراتر از ماتریس دوبعدی نیست (سهبعدی در مورد تصاویر رنگی) که توسط توابع ریاضی f(x, y) در هر نقطهای که مقدار پیکسل تصویر دادهشده است؛ تعریف میگردد. مقدار پیکسل تعریف میکند که هر پیکسل چقدر باید روشن باشد و رنگ آن چگونه باید باشد.
پردازش تصویر اصولاً پردازش سیگنالی است که ورودی آن تصویر و خروجی آن تصویری است که طبق ویژگیهای مخصوص مورد نیاز تصویر، مورداستفاده قرار میگیرد.
پردازش تصویر اصولاً شامل گامهای زیر میشود:
۱.واردکردن تصویر
۲.آنالیز و دستکاری تصویر
۳.خروجی که میتواند تصویری دیگر و یا گزارشی بر مبنای آنالیز تصویر باشد
تصویر زیر را در نظر بگیرید:

انسانها بهراحتی میتوانند تصویر بالا را مورد پردازش قرار دهند و اطلاعات داخل آن را استخراج کنند. اما اگر ما از کامپیوتر بپرسیم “آیا این تصویر یک مسجد است؟” کامپیوتر نمیتواند هیچگونه پاسخی به سؤال یادشده بر مبنای اطلاعات خود بدهد.
کامپیوتر، تصویر را با مقادیر پیکسلهایی بین ۰ تا ۲۵۵ فراخوانی میکند. برای تمام تصاویر رنگی، سه کانال رنگی اصلی قرمز، سبز و آبی وجود دارد.
OpenCV یک کتابخانه متنباز و قدرتمند برای بینایی کامپیوتر، پردازش تصویر و یادگیری ماشین است. کاربردهای آن شامل تشخیص چهره، شمارش خودرو، هدایت ربات، تحلیل تصاویر پزشکی و خودروهای خودران میشود.
OpenCV از زبانهای C++، C، پایتون و جاوااسکریپت پشتیبانی میکند و روی سیستمعاملهای ویندوز، لینوکس، مک، iOS و اندروید قابل اجراست.
پردازش تصویر: ورودی و خروجی تصویر است (مثل بهبود کیفیت یا فیلتر کردن).
بینایی کامپیوتر: ورودی تصویر، خروجی درک و اطلاعات معنادار (مثل تشخیص شیء یا چهره) است.
OpenCV هر دو حوزه را پوشش میدهد.
کامپیوتر تصویر را به صورت ماتریسی از اعداد (۰ تا ۲۵۵ برای هر پیکسل) میبیند. در تصاویر رنگی، سه ماتریس مجزا برای کانالهای قرمز، سبز و آبی (RGB) وجود دارد.
OpenCV در سال ۱۹۹۹ توسط گری برادسکی در شرکت اینتل آغاز شد. اولین نسخه در سال ۲۰۰۰ منتشر گردید. وادیم پیساروسکی نیز به تیم پیوست. این کتابخانه در پروژه خودروی خودران Stanley (برنده جایزه DARPA در ۲۰۰۵) به کار رفت.
زیرا هسته اصلی OpenCV به زبان C/C++ بهینهشده نوشته شده و از پردازش چندهستهای پشتیبانی میکند. همچنین قابلیت شتابدهی با CUDA (کارتهای گرافیک NVIDIA) را دارد.
NumPy مهمترین کتابخانه است، زیرا تصاویر در OpenCV-Python به صورت آرایههای NumPy ذخیره میشوند. همچنین از Matplotlib برای نمایش، و SciPy برای محاسبات علمی استفاده میشود.