جستجو در تالارهای گفتگو
در حال نمایش نتایج برای برچسب های 'opencv'.
2 نتیجه پیدا شد
-
در جلسه قبل کتابخانه را دانلود و نصب کردیم و برای تست کدی را اجرا کردیم که حاصل ان نمایش یک تصویر در یک پنجره بود اما درباره ی کلاس 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); } حاصل اجرای کد بالا به صورت زیر خواهد بود: تابع 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); } حاصل اجرای کد بالا به صورت زیر خواهد بود: برای بهتر متوجه شدن این تابع چند بار موقعیت 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); } حاصل اجرای کد بالا به صورت زیر خواهد بود: تابع 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); } حاصل اجرای کد بالا به صورت زیر خواهد بود: با تعغیر دادن مقیاس و دلتا نتایج دیگری بدست می اید همچنین عمق و سایز پیکسل با تعغیر رو تصویر تاثیر میگذارند. تابع 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); } حاصل اجرا کد بالا بصورت زیر خواهد بود:
- 1 پاسخ
-
- پردازش تصویر
- library
-
(و 4 مورد دیگر)
برچسب زده شده با :
-
همانطور که میدانید کتابخانهی OpenCV کتابخانهای قدرتمند در زمینه پردازش است این پردازش شامل مواردی مانند پردازش تصویر، پردازش ویدیو، سیستم تشخیص چهره ، تشخیص حرکت، الگورریتمهای گوناگون مانند الگوریتم گراف و... است. بیشتر تمرکز این کتابخانه بر روی پردازش تصویر است که میتوان گفت به خوبی در این زمینه نمایان شده است. برای اینکه بتوانیم از این کتابخانه استفاده کنیم باید آن را در محیطی که کدنویسی میکنیم وارد کنیم که محیط مورد نظر در این اموزش ویژال استویو است. برای این منظور ویژوال استودیو رو باز کنید و New Project رو انتخاب کنید از پنجره ای که باز میشود قسمت Other Languages و ++Visual C و General را انتخاب کنید در این قسمت باید یک پروژه خالی بسازید پس Empty Project و نام و مسیر پروژه را انتخاب کنید و Ok را بزنید پس از ان از قسمت View و Solution Explorer را انتخاب کنید روی پروژه خود کلیک راست کنید و گزینه Manage NuGet Packages را انتخاب کنید در اینجا باید به اینترنت متصل باشید تا بتوان کتابخانه ی مورد نظر را دانلود کرد در کادر بالای پنجره باز شده عبارت OpenCV را بنویسید و پس از جستجو اخرین نسخه از این کتابخانه را دانلود کنید مراحل نصب و پیکربندی پس از دانلود بصورت خودکار انجام میشود پس از نصب ما میتوانیم کد نویسی خود را با این کتابخانه شروع کنیم برای اینکه مطمئن شویم کتابخانه بصورت صحیح نصب شده است باید ان را تست کنیم برای این کار به یک فایل منبع نیاز داریم پس بر روی پوشه ی Source کلیک راست کرده گزینه Add را انتخاب کرده سپس بر روی گزینه New Item کلیک کرده و در پنجره باز شده ++File C را انتخاب کنید در پایین پنجره نام فایل را انتخاب کنید و Ok را بزنید اکنون کد زیر را در برنامه خود وارد کنید و اجرا کنید : #include <opencv2\opencv.hpp> #include <Windows.h> using namespace cv; int main() { Mat image_read = imread("beautiful-sunset-sunrise-photo-5.jpg", IMREAD_COLOR); imshow("Show", image_read); ShowWindow(GetConsoleWindow(), SW_HIDE); waitKey(0); } در ورودی اول تابع imread مسیر تصویر را بدهید که تصویر مورد نظر در این مثال در پوشه پروژه است.