Tiny Tech

ورودی گرفتن از دوربین در OpenCV

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

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

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

حتی ممکن است بخواهیم با داده بی درنگی که مستقیما از دوربین دریافت می کنیم، کار کنیم.

OpenCV و به طور خاص بخش HighGUI از کتابخانه ی OpenCV روشی اسان برای مدیریت این حالات فراهم می کند.

این روش ، شبیه خواندن فایل های AVI است با این تفاوت که به جای فراخوانی ()cvCreateFileCapture ، تابع ()cvCreateCameraCapture را فرا می خوانیم.

این روتین نام فایل را نمیگیرد، بلکه یک شماره شناسایی دوربین به عنوان ارگومان دریافت می کند.

البته این ارگومان تنها زمانی که چنددوربین داشته باشیم ، مهم است .

مقدار پیشفرض ۱- است.

بدین معنا که یک دوربین دلخواه را انتخاب کن! طبیعتا این مقدار پیش فرض وقتی تنها یک دوربین برای انتخاب وجود دارد، به خوبی کار می کند.

تابع ()cvCreateCameraCapture یک اشاره گر مشابه CvCapture* برمی گرداند که از این به بعد می توانیم ان را مانند قاب های به دست امده از یک جریان ویدیویی رفتار کنیم.

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

بسیاری از کاربرد هایی که بی درنگ فرض شده اند، یک ورودی ویدیو دارند که پیاده سازی ان با ساختار عمومی CvCapture بسیار اسان می شود.

مثال

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

CvCapture* capture;
if( argc == 1 ){
capture = cvCreateCameraCapture(0);
}else {
    capture = cvCreateCameraCapture ( argv[1] );
}
assert ( capture != NULL );
//Rest of program proceeds totally ignorant

همانطور که میبینید این روش بسیار ایده آل است.