Tiny Tech

مقدمه ای بر OpenCV – بخش دوم

خب یک نگاهی به تمام سطر های برنامه بیاندازیم و کمی در مورد این که هر دستور چه کاری انجام می دهند صحبت کنیم.

 

IplImage* img = cvLoadImage( argv[1] );

 

این خط تصویر را بارگذاری می کند.

تابع ()cvLoadImage بک تابع سطح بالا است که فرمت فایلی که بایستی بار شود را با توجه به نام فایل مشخص می کند.

همچنین این تابع به صورت خودکار حافظه ی مورد نیاز برای داده تصویر را تخصیص می دهد.

توجه کنید که ()cvLoadImage می تواند انواع متفاوتی از فرمت های تصویر از قبیل PNG , JPE , JPEG , DIB , BMP , PGM , PBM , PPM , RAS , SR و TIFF را بخواند.

در نهایت یک اشاره گر به ساختار دادهی تصویر تخصیص یافته برگشت داده می شود.

این ساختار که IplImage گفته می شود، ساختاری در OpenCV است که با ان مرتب سروکار خواهید داشت.

OpenCV از این ساختار برای مدیریت همه نوع تصویر شامل یک کاناله، چند کاناله، با مقدار صحیح، اعشاری و غیره استفاده می کند.

ما برای کار با تصویر و اطلاعات آن از اشاره گری که تابع بر میگرداند استفاده می کنیم.

 

cvNameWindow("Example1", CV_WINDOW_AUTOSIZE );

 

()cvNameWindow ، یک تابع سطح بالای دیگر است که یک پنجره روی صفحه باز می کند و می تواند یک تصویر را در برگفته و نمایش دهد.

این تابع که توسط کتابخانه HighGUI فراهم شده است، یک نام به پنجره می دهد ( در این مثال  “Example1” ).

از این به بعد با این نام به این پنجره اشاره می کنیم.

ارگومان دوم ()cvNameWindow ویژگی های پنجره را تعریف می کند.

این مقدار می تواند صفر ( مقدار پیشفرض ) یا CV_WINDOW_AUTOSIZE باشد.

در حالت اول اندازه پنجره بدون توجه به اندازه تصویر قابت است و تصویر برای ان که در پنجره جا شود تغییر اندازه می دهد.

در حالت دوم زمانی که یک تصویر بار می شود، پنجره به صورت خودکار بزرگ و کوچک می شود تا به اندازه واقعی تصویر دراید.

 

cvShowImage("Example1", img );

 

هر گاه یک تصویر در قالب یک اشاره گر IPlImage داشته باشیم می توانیم ان را در یک پنجره موجود با تابع ()cvShowImage نشان دهیم.

تابع ()cvShowImage به یک پنجره که از قبل ایجاد شده باشد، نیاز دارد.

با فراخوانی ()cvShowImage پنجره با تصویر مناسب پر می شود.

اگر پنجره در حالت CV_WINDOW_AUTOSIZE ایجاد شده باشد، اندازه پنجره به اندازه تصویر تغییر می کند.

 

cvWaitKey(0);

 

تابع ()cvWaitKey برنامه را متوقف کرده و منتظر فشار یک کلید می ماند.

اگر ارگومان یک مقدار مثبت باشد، برنامه به اندازه ان شماره ( بر حسب میلی ثانیه ) منتظر کانده و سپس اگر هیچ کلیدی را فشار داده نشد، ادامه می دهد.

اگر ارگومان به صور یا مقدار منفی تنظیم شود، برنامه به صورت نامحدود برای فشار دادن کلید منتظر می ماند.

 

cvReleaseImage( &img);

 

پس از این که ما با یک تصویر تمام شد، بایستی حافظه ی اختصاص یافته را ازاد کنیم.

OpenCV برای این کار به یک اشاره گر *IplImage نیاز دارد.

بعد از این که این دستور انجام شد، اشاره گر img به نال مقداردهی می شود.

 

cvDestroyWindow("Example1");

 

در نهایت می توانیم خود پنجره را از بین ببریم.

تابع ()cvDestroyWindow پنجره را بسته و حافظه مرتبط با ان را پس میدهد.

برای یک برنامه ساده واقعا نیاز نیست که ()cvDestroyWindow یا ()cvReleaseImage را فراخوانی کنید، زیرا همه ی منابع و پنجره های برنامه به صورت حودکار در هنگام خروج از برنامه بسته می شوند.

اما این کار در هر حال عادت خوبی است.

 

مثال بعدی ما ساخت یک برنامه به سادگی برنامه قبل برای خواندن و نمایش یک فایل ویدئویی AVI است.