رفتن به مطلب
جامعهٔ برنامه‌نویسان ایران

پست های پیشنهاد شده

در جلسه قبل کتابخانه را دانلود و نصب کردیم و برای تست کدی را اجرا کردیم که حاصل ان نمایش یک تصویر در یک پنجره بود اما درباره ی کلاس Matو همچنین توابع imread،imshow،waitKey توضیحی ندادیم کلاس Mat یک ماتریس است که تا هر چند بعد را در خود ذخیره میکند تابع imread برای بارگذاری تصویر است که تصویر را  خوانده و در قالب یک ماتریس برمیگرداند که اینجا تصویر دو بعد دارد RowوColumn وقتی تصویر بارگذاری شد باید در یک ماتریس ذخیره شود پس به یک ماتریس نیاز داریم که همونطور که دیدید تعریف کردیم تابع imshow برای نمایش تصویر است ورودی اول این تابع نام پنجره است و ورودی دوم یک InputArray است که یک ورودی از ارایه از ما میخواهد در اینجا ما از هر کلاس کانتینری یا حتی ارایه معمولی هم بدهیم قبول میکند چون از ما یک ورودی ارایه میخواهد فرقی نمی کند که این ورودی چگونه و از چه نوعی باشد اما چون این یک تصویر را نمایش میدهد باید ورودی بدهیم که حاوی داده های تصویر باشد نه چیز دیگری پس به این موضوع هم دقت کنید تابع waitKey  منتظر می ماند تا بعد از نمایش تصویر و فشردن کلیدی از صحفه کلید به برنامه پایان دهد. در این جلسه به کلاس Image Filtering توابع کاربری ان میپردازیم ابتدا چند تابع  این کلاس را توضیح خواهم داد و سپس از هر کدام یک مثال خواهم زد.
چند تابع که این کلاس دارد عبارتند از:bilateralFilter،blur،boxFilterLaplacian،medianBlur این چند تابع هر کدام فیلتری رو تصویر اعمال میکنند در هنگام دادن ورودی به توابع به ان چیزی که میخواهد توجه کنید و مقادیر صحیح را به ورودی توابع بدهید که به خطا مواجه نشوید در غیر اینصورت به مشکل برمیخورید.
تابع bilateralFilter: یک محدوده ی مشخص شده توسط پارامتر سوم را با اندازه های داده شده در پارامتر های چهارم و پنجم را که مشخص کنند رنگ و فاصله هستند ترکیب میکند پارامتر سوم مشخص میکند در چه محدودهای از پیکسل های تصویر شروع به ترکیب رنگ در فاصله ی داده شده در پارامتر پنجم کند این محدوده اگر کوچکتر از پارامتر های چهارم و پنجم باشد بخشی از پیکسلها را در برمیگیرد اگر در پارامتر های چهارم و پنجم اندازه ی بیش از حد بدهیم و اندازه ی پارامتر سوم بیش از حد کوچک باشد تصویر به حالت کدر در می اید در غیر اینصورت اگر پارامتر ها بدرستی تنظیم شده باشند یک ترکیب رنگ زیبا در تصویر را خواهیم داشت این ترکیب رنگ در خود تصویر است به مثال زیر دقت کنید:
#include <opencv2\opencv.hpp>
#include <Windows.h>
using namespace cv;
int main()
{
	Mat output_image;
	Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\beautiful-sunset-sunrise-photo-5.jpg", IMREAD_COLOR);
	bilateralFilter(image_read, output_image, 100, 300, 500);
	imshow("befor", image_read);//befor Filtering
	imshow("after", output_image);//after Filtering
	ShowWindow(GetConsoleWindow(), SW_HIDE);
	waitKey(0);
}
حاصل اجرای کد بالا به صورت زیر خواهد بود:

8ezd_b.jpg

تابع blur: با دریافت عرض و ارتفاع و موقعیت xوy در تصویر حالت تاری را به وجود می اورد باید دقت کنید موقعیت باید به همان اندازه مشخص شود که در عرض و ارتفاع مشخص میشود بیشتر از عرض و ارتفاع باشد برنامه متوقف خواهد شد چون نباید بزرگتر از عرض و ارتفاع باشد  هر چه موقعیت بیشتر باشد تاری در ان موقعیت بیشتر میشود به مثال زیر دقت کنید:
#include <opencv2\opencv.hpp>
#include <Windows.h>
using namespace cv;
int main()
{
	Mat output_image;
	Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\beautiful-sunset-sunrise-photo-5.jpg", IMREAD_COLOR);
	//bilateralFilter(image_read, output_image, 100, 300, 500);
	blur(image_read, output_image, Size(100, 100),Point(99,99));
	imshow("befor", image_read);//befor Filtering
	imshow("after", output_image);//after Filtering
	ShowWindow(GetConsoleWindow(), SW_HIDE);
	waitKey(0);
}
حاصل اجرای کد بالا به صورت زیر خواهد بود:
2ccj_blur.jpg
 
برای بهتر متوجه شدن این تابع چند بار موقعیت xوy را تغییر دهید و نتیجه را ببینید.
تابع boxFilter: با مشخص کردن عمق برای تصویر و عرض و ارتفاع و موقعیت xوy ان منطقه از تصویر را با توجه به مقداری که برای عمق تصویر داده میشود تغییرمیدهد در بعضی موارد که به عنوان مثال عمق تصویر 0 باشد تصویر در همان حالت خود باقی میماند و درواقع کار تابع blur را انجام میدهد در پارامتر اخر میتوانید حالت border ان را تایین کنید که میتواند توسط خود نوع های شمارشی مورد استفاده قرار گیرد که جایی که فیلتر شده است خط مرزی ان رسم شود به مثال زیر دقت کنید:
#include <opencv2\opencv.hpp>
#include <Windows.h>
using namespace cv;
int main()
{
	Mat output_image;
	Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\0.047489001316013508_pixnaz_ir.jpg", IMREAD_COLOR);
	//bilateralFilter(image_read, output_image, 100, 300, 500);
	boxFilter(image_read, output_image, 5, Size(1, 1));
	imshow("befor", image_read);//befor Filtering
	imshow("after", output_image);//after Filtering
	ShowWindow(GetConsoleWindow(), SW_HIDE);
	waitKey(0);
}
حاصل اجرای کد بالا به صورت زیر خواهد بود:
qex9_box.jpg
تابع Laplacian: با دریافت عمق سایز پیکسل مقیاس برای روشنایی و  مقدار دلتا تصویر را به حالت های مختلف درمی اورد دقت داشته باشید برای دریافت نتیجه مطلوب باید مقیاس و دلتا هر دو مقداری داشته باشند نداشتن مقدار برای هر کدام تصویر را روشن و تیره میکند به مثال زیر دقت کنید:
#include <opencv2\opencv.hpp>
#include <Windows.h>
using namespace cv;
int main()
{
	Mat output_image;
	Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\c9ac_d2ynkbk.jpg", IMREAD_COLOR);
	//bilateralFilter(image_read, output_image, 100, 300, 500);
	//boxFilter(image_read, output_image, 5, Size(1, 1));
	Laplacian(image_read, output_image, 0,1,10.0,100.0);
	imshow("befor", image_read);//befor Filtering
	imshow("after", output_image);//after Filtering
	ShowWindow(GetConsoleWindow(), SW_HIDE);
	waitKey(0);
}

حاصل اجرای کد بالا به صورت زیر خواهد بود:

g384_l.jpg

با تعغیر دادن مقیاس و دلتا نتایج دیگری بدست می اید همچنین عمق و سایز پیکسل با تعغیر رو تصویر تاثیر میگذارند.
تابع medianBlur: با دریافت سایز در پارامتر سوم تصویر را بصورت خاصی کدر میکند که هرچه سایز بیشتر باشد تصویر کارتونی به نظر میرسد به مثال زیر دقت کنید:
#include <opencv2\opencv.hpp>
#include <Windows.h>
using namespace cv;
int main()
{
	Mat output_image;
	Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\c9ac_d2ynkbk.jpg", IMREAD_COLOR);
	//bilateralFilter(image_read, output_image, 100, 300, 500);
	//boxFilter(image_read, output_image, 5, Size(1, 1));
	medianBlur(image_read, output_image, 17);
	imshow("befor", image_read);//befor Filtering
	imshow("after", output_image);//after Filtering
	ShowWindow(GetConsoleWindow(), SW_HIDE);
	waitKey(0);
}
حاصل اجرا کد بالا بصورت زیر خواهد بود:

4e88_m.jpg

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

به گفتگو ملحق شوید

شما همین الآن می‌توانید مطلبی را ارسال و بعداً ثبت‌نام کنید. اگر حساب کاربری دارید، و با حساب کاربری خود مطلب ارسال کنید.
نکته: مطلب شما قبل از انتشار نیاز به بازبینی توسط میانجی‌گر‌ها دارد.

مهمان
ارسال پاسخ به این موضوع ...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از ۷۵ اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به عنوان یک لینک به جای

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.


  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×
×
  • جدید...