آنچه در این صفحه میخوانید:
OpenCV چیست؟
OpenCV کتابخانه بینایی رایانه ای اوپن سورس و کتابخانه نرم افزاری یادگیری ماشینی است. OpenCV برای ارائه یک زیرساخت مشترک برای برنامه های کاربردی Computer Vision و سرعت بخشیدن به استفاده از ادراک ماشین در محصولات تجاری ساخته شده است. به عنوان یک محصول با مجوز BSD، کسب و کار را برای استفاده و اصلاح کد آسان می کند. OpenCV برای پردازش تصویر و Computer Vision است که در ابتدا توسط Intel ساخته شد و اکنون توسط Willow Garage پشتیبانی می شود که برای استفاده تجاری و غیر تجاری رایگان است. OpenCV یک کتابخانه از توابع inbuilt است که عمدتا برای پردازش تصویر در real-time است. در حال حاضر دارای صدها پردازش تصویر و الگوریتم های Computer Vision است که باعث می شود برنامه های کاربردی پیشرفته رایانه ای را آسان و کارآمد کنند.
تاریخچه OpenCV
به طور رسمی در سال 1999 راه اندازی شد، پروژه OpenCV در ابتدا ابتکار تحقیقات Intel برای پیشبرد برنامه های فشرده پردازنده، بخشی از یک سری پروژه ها از جمله ردیابی اشعه در real-time و دیواره نمایشگر سه بعدی بود. مشارکت کنندگان اصلی این پروژه شامل تعدادی از کارشناسان بهینه سازی در اینتل روسیه و همچنین تیم کتابخانه عملکرد اینتل بودند. در ابتدا، اهداف این پروژه به شرح زیر بود:
- تحقیقات بینایی با ارائه نه تنها کد باز و همچنین بهینه شده برای زیرساخت های بینایی اساسی؛ دیگر نمی توان چرخ را اختراع کرد.
- دانش بینایی را با فراهم کردن زیر ساخت مشترکی که توسعه دهندگان می توانند بر آن بنا کنند، توزیع کنند، تا خواندن کد آسان تر و قابل انتقال باشد.
- برنامه های تجاری مبتنی بر بینایی را با تهیه کد قابل حمل و بهینه سازی شده به صورت رایگان در دسترس قرار دهید، با مجوزی که نیازی به کدنویسی نداشته باشد یا خودش رایگان نباشد.
اولین نسخه آلفا از OpenCV در سال 2000 در کنفرانس IEEE در مورد بینایی رایانهای و تشخیص الگو در دسترس عموم قرار گرفت. اولین نسخه 1.0 در سال 2006 منتشر شد. نسخه 1.1 اکتبر 2008 منتشر شد. دومین نسخه بزرگ OpenCV در اکتبر 2009 بود. OpenCV 2 شامل تغییرات اساسی در رابط ++C است که هدف آن ساده تر بودن، الگوهای ایمن تر، عملکردهای جدید و اجرای بهتر برای موجود از نظر عملکرد است. انتشار رسمی اکنون هر شش ماه رخ می دهد و اکنون توسعه توسط تیم مستقل روسی با حمایت شرکت های تجاری انجام می شود. در آگوست 2012، پشتیبانی از OpenCV توسط بنیاد غیرانتفاعی OpenCV.org که سایت توسعه دهنده و کاربر را حفظ می کند، به دست آمد. در ماه مه سال 2016، اینتل توافق نامه ای برای به دست آوردن Itseez، توسعه دهنده برجسته OpenCV امضا کرد.
ویژگی های OpenCV
- بهینه سازی شده برای پردازش تصویر در real-time و برنامه های کاربردی Computer Vision
- رابط اولیه OpenCV در سی پلاس پلاس است.
- دارای رابط های سی ،پایتون و جاوا
- برنامه های OpenCV قابل اجرا در ویندوز، اندروید، لینوکس، مک و آی او اس
- بهینه شده برای پردازنده های اینتل
OpenCV در حال حاضر به طور گسترده ای برای توسعه پردازش تصویر پیشرفته و برنامه های کاربردی Computer Vision استفاده می شود. این ابزار برای دانش آموزان، مهندسان و محققان در گوشه و کنار جهان بوده است.
کاربرد OpenCV
OpenCV برای تأسیس زیرساخت های مشترک برای برنامه های بینایی کامپیوتر و تسریع در استفاده از ادراک دستگاه در محصولات تجاری ساخته شده است. این کتابخانه دارای بیش از 2500 الگوریتم بهینه سازی شده است، که شامل مجموعه ای کامل از الگوریتم های رایانه ای کلاسیک و پیشرفته و یادگیری ماشین است. از این الگوریتم ها می توان برای تشخیص و شناسایی چهره ها، شناسایی اشیاء، طبقه بندی اقدامات انسانی در فیلم ها، ردیابی حرکات دوربین، ردیابی اجسام در حال حرکت، استخراج مدل های سه بعدی اشیاء، تولید ابرهای سه بعدی از دوربین های استریو، تصاویر را در کنار هم برای تولید وضوح بالا استفاده کرد. تصویر صحنه کامل، یافتن تصاویر مشابه از پایگاه داده تصویر، حذف چشم قرمز از تصاویر گرفته شده با استفاده از فلاش، دنبال کردن حرکات چشم، تشخیص مناظر و ایجاد نشانگر برای پوشش آن با واقعیت افزوده و غیره. OpenCV بیش از 47 هزار نفر، جامعه کاربر دارد و تعداد تخمینی دانلود ها بیش از 18 میلیون نفر است. این کتابخانه به طور گسترده در شرکت ها، گروه های تحقیقاتی و نهادهای دولتی استفاده می شود.
در کنار شرکت های مستقر مانند گوگل، یاهو، مایکروسافت، اینتل، IBM، سونی، هوندا، تویوتا که این کتابخانه را به کار می گیرند، بسیاری از استارتاپ ها مانند Appled Minds ،VideoSurf و Zeitera وجود دارند که از OpenCV استفاده گسترده می کنند. استقرار OpenCV طیف وسیعی از بخیه دادن تصاویر Streetview به هم، نظارت بر تجهیزات معدن در چین، کمک به روبات ها برای پیمایش و برداشتن اشیاء در گاراژ Willow، کشف استخرهای غرق در حوادث در اروپا، اجرای هنرهای تعاملی در اسپانیا و نیویورک، در حال بررسی باند فرودگاه برای زباله در ترکیه، برچسب های موجود در کارخانه ها در سراسر جهان برای شناسایی سریع صورت در ژاپن هستند.
زبان برنامه نویسی OpenCV
OpenCV به زبان C نوشته شده است و رابط اصلی آن در C است، اما هنوز هم یک رابط C قدیمی اما جامع است. ارتباطات در پایتون، جاوا و MATLAB / OCTAVE وجود دارد. API برای این واسط ها را می توان در مستندات آنلاین یافت. همچنین به زبان های دیگر مانند سی شارپ ،پرل ،هاسکل و روبی برای تشویق مخاطبان گسترده تر ساخته شده اند.
هم اکنون همه پیشرفت ها و الگوریتم های جدید OpenCV در رابط C توسعه یافته اند. دارای رابط های C++ ،Python ،Java و متلب است و از Windows ،Linux ،Android و Mac OS پشتیبانی می کند. OpenCV بیشتر متمایل به برنامه های بینایی در real-time است و در صورت وجود از دستورالعمل های MMX و SSE استفاده می کند. رابط های کاملاً برجسته CUDA و OpenCL هم اکنون فعالانه در حال توسعه هستند. بیش از 500 الگوریتم و حدود 10 برابر بیشتر عملکرد وجود دارد که آن الگوریتم ها را تشکیل یا پشتیبانی می کند. OpenCV بصورت محلی با زبان ++C نوشته شده است و دارای رابط کارآمد است که یکپارچه با ظروف STL کار می کند.
OpenCV با پایتون
OpenCV-Python کتابخانه ای از اتصالات پایتون است که برای حل مشکلات بینایی رایانه طراحی شده است. پایتون زبان برنامه نویسی همه منظوره است که توسط Guido van Rossum آغاز شده است و خیلی سریع، به دلیل سادگی و خوانایی کد، بسیار محبوب شد. این قابلیت برنامه نویس را قادر می سازد ایده های خود را در خط کد کمتر بدون کاهش خوانایی بیان کند. در مقایسه با زبان هایی مانند C++ / C، پایتون کندتر است. گفته می شود، پایتون را می توان به راحتی با ++C / C، که به ما امکان نوشتن کد فشرده محاسبه شده در ++C / C و ایجاد بسته های پایتون را می دهد که می تواند به عنوان ماژول های پایتون ایجاد شود، فراهم کرد. این دو مزیت به ما می دهد: اول، کد به همان سرعت کد اصلی ++C / C است و دوم، کدگذاری در Python از C++ / C آسان تر است. OpenCV-Python بسته بندی Python برای اجرای اصلی ++OpenCV C است.
OpenCV-Python از Numpy استفاده می کند، که کتابخانه بسیار بهینه برای عملیات عددی با نحوی به سبک MATLAB است. تمام ساختارهای آرایه OpenCV به آرایه های Numpy تبدیل می شوند. این امر همچنین باعث می شود ادغام با كتابخانه های دیگر كه از Numpy مانند SciPy و Matplotlib استفاده می كنند، آسانتر شود. OpenCV مجموعه جدیدی از آموزش را ارائه می دهد که شما را از طریق عملکردهای مختلف موجود در OpenCV-Python راهنمایی می کند. این راهنما عمدتاً بر روی نسخه OpenCV 3.x متمرکز شده است.
دانش قبلی درباره Python و Numpy توصیه می شود. مهارت با Numpy به منظور نوشتن کد بهینه شده با استفاده از OpenCV-Python ضروری است. این آموزش ابتدا توسط Abid Rahman K. به عنوان بخشی از برنامه Google Summer of Code 2013 تحت هدایت الكساندر موردوینتسف آغاز شد.
مثال های OpenCV
مثال برای خواندن، نمایش و ذخیره تصویر در Open CV
مراحل:
- بارگیری تصویر با استفاده از ()Imread.
- نمایش تصویر با استفاده از ()namesWindow و ()imshow.
- با استفاده از imwrite، تصویر را ذخیره کنید.
- منتظر فشار دادن دکمه صفحه کلید با استفاده از ()waitKey باشید.
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main( )
{
Mat image;
// LOAD image
image = imread("image1.jpg", CV_LOAD_IMAGE_COLOR); // Read the file "image.jpg".
//This file "image.jpg" should be in the project folder.
//Else provide full address : "D:/images/image.jpg"
if(! image.data ) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl ;
return -1;
}
//DISPLAY image
namedWindow( "window", CV_WINDOW_AUTOSIZE ); // Create a window for display.
imshow( "window", image ); // Show our image inside it.
//SAVE image
imwrite("result.jpg",image);// it will store the image in name "result.jpg"
waitKey(0); // Wait for a keystroke in the window
return 0;
}