کانولوشن کردن ویدیو به وسیله ی OpenCV

1 سال پیش
Rate this post

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

بسیاری از کار های بینایی پایه، با به کار گیری فیلتر ها برای یک جریان ویدیویی سرو کار دارند.

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

یک عمل ساده می تواند هموار کردن تصویر باشد که به طور موثری محتوای اطلاعات تصویر از طریق کانولوشن تصویر با یک تابع گاوسی یا دیگر توابع هسته مشابه، کاهش می دهد.

OpenCV انجام چنین کانولوشن هایی را بسیار اسان می کند.

می توانیم با ایجاد یک پنجره ی جدید نام “Example4-out” که نتیجه ی پردازش را نشان دهد، شروع کنیم.

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

مثال ) بارگذاری و هموارسازی یک تصویر و نمایش ان روی صفحه.

 #include "cv.h" 
#include "highgui.h" 
void example2_4 ( IplImage* image ){ 
//create some windows to show the input 
//and output images in.
cvNamedWindow( "Example4-in" ); cvNamedWindow( "Example4-out" );
//create a window to show our input image.
IplImage ( "Example4-in", image );

//create an image to hold the smoothde output.

IplImage* out = cvCreateImage( cvGetSize( image ), IPL_DEPTH_8U, 3 );

//do the smoothing.

cvSmooth( image, out, CV_GAUSSIAN, 3, 3);

//show the smoothed image in the output window.

cvShowImage( "Example4-out" , out );

//be tidy.

cvReleaseImage( &out );

//wait for the user to hit a key, then clean up the windows.

cvWaitkey( O );
cvDestroyWindow( "Example4-in" );
cvDestroyWindow( "Example4-out" );
} 

اولین فراخوانی ()cvShowImage با مثال قبل تفاوتی ندارد.

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

قبلا برای تخصیص قاب جدید به ()cvCreateFileCapture تکیه می کردیم.

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

در این مثال می خواهیم ساختار تصویر را خود تخصیص دهیم تا بتوانیم تصویر هموار شده را روی ان بنویسیم.

اولین ارگومان یک ساختار CvSize است که می توانیم با فراخوانی (cvGetSize(image ان را ایجاد کنیم.

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

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

بنابراین، این تصویر سه کاناله ( با ۸ بیت در هر کانال ) و هم اندازه image است.

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

در این مثال یک هموار سازی گاوسی روی یک ناحیه ۳ در ۳ که مرکز ان روی هر پیکسل قرار میگیرد، به کار می بریم.

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

اکنون می توانیم تصویر را در پنجره ی جدید خود نمایش داده و سپس ان را ازاد کنیم.

()cvReleaseImage یک اشاره گر از نوع *IplImage گرفته و سپس همه حافظه اختصاص داده شده به ان تصویر را ازاد می کند.

Rate this post
۰
برچسب ها :

دیدگاه شما

سیزده + 18 =

بدون دیدگاه