نمایش/عدم نمایش سایدبار
رفتن به بالای صفحه
مهدی دمیرچیلو

آموزش opencv کتابخانه highgui جلسه 1

به نام خدا : سلام، این دومین مطلب مربوط به opencv هستش تو مطلب قبلی یه سری منابع آموزشی معرفی کردم(معرفی منابع آموزش فارسی و انگلیسی opencv)، تو این مطلب از آموزش opencv میخوایم یه پروژه ساده opencv رو با هم ببینیم و یه عکس در opencv نمایش بدیم، و به بررسی توابع کتابخانه highgui هم میپردازیم.
آموزش opencv نمایش عکس جلسه 1

آموزش opencv کتابخانه highgui جلسه 1


داستان کربلا رفتن ما : وقتی رفتیم لب مرز از اونجا ماشین سوار شدیم(حالا دنگ و فنگش بماند برای بعد) و تو ماشین ما رفتیم ته ماشین نشستیم(4 نفر بودیم ما) این ماشین ها رو چی بهش میگن ون میگن چی میگن، 4 نفری کل اون ردیف آخر ماشین رو گرفته بودیم(نشسته بودیم^_^) تو ماشین 1 اصفحانی بود، ما هم دیدیم طرف داره یه چیزی میخوره^_^ هیچی یه نیم ساعتی رو مخش راه رفتیم و اضیتش کردیم تا آخر سر تمام آجیل هاش رو داد ما خوردیم^_^ (البته یه 2-3 تا خانم هم بودن- سن بالا- جای مادرمون – که خداییش خیلی آدمای خوبی بودن، با ما همکاری میکردن و این اصفحانی هه رو تحریک میکردن ^_^ این کیفی کردیم) یادمه رفیقم شروع کرد به خوندن زیادرت عاشورا – هیچی بنده خدا وسط کار صداش گرفت ^_^ لامسب صداش درنمیومد که، هیچی ما هم چیزی دستمون نبود و یه لیوان آب سرد دادیم بهش خورد ^_^ هیچی تا آخر کار با همون صداش خوند زیارت رو، صدای ماشین یه طرف و صدای این داش ما هم یه طرف، من که بقلش بودم فقط صداش رو میشنیدم^_^ بنده خدا صداش در نمیومد، آخر سر هم که 10 دقیقه مونده بود به محل مد نظر در نجف برسیم آنچنان گریه ای کردم که ملت انگشت به دهن …^_^ ، بعد رفتیم حرم امام علی و بعد زیارت دیگه شب شده بود و وقت خواب، رفتیم یه حسینیه ای پیدا کردیم(لامسب جمعیت این قدر زیاد بود که جا برا خواب پیدا نمیشد) رفتیم اونجا داخل حسینیه، سر بسته بود(حیاطش سقف داشت) بچه ها رفتن داخل اتاق و خوابیدن و برا من جا نشد که برم هیچی ما گرفتیم تو حیاط خابیدیم، یه مبل 2 نفره بود که وسطش خیس بود، دو نفری(با یه اصفحانیه….فک کنم اصفحانی بود، بچه باحالی بود، تا 3 شب باهاش صحبت میکردم) رو اون مبله گرفتیم خوابیدیم. دو نفر رو یه مبل دو نفره گرفتن خوابیدن^_^(خودتون فکرش رو بکنید)، چقدر با این بنده خدا من حرف زدم، میگفت من طلبه هستم(هم طلبه بود و هم یه رشته دیگه میخوند فک کنم) و میگفت من فکم قوی هستش و از این جور حرفا(چون بهش فک کنم گفته بودم مشکلی نداری با هم حرف بزنیم و صحبت کنیم طرف این حرفو زد) هیچی طرف ما رو نمیشناخت، این قدر باهاش صحبت کردیم که دیگه اخر سر بنده خدا کم ابرد^_^ ، یادمه براش داستان تعریف میکردم و وسط داستان گفتن من خوابم میبرد و بعد یه به حالت هوشیاری برمیگشتم بهمش میگفتم من داستان رو چی و چطور تعریف کردم و بعد اون میگفت اینا رو گفتی و منم گفتم درست گفتم(خودم کیف کردم که تو حالت نیمه هوشیاری داستان رو درست گفتم^_^) خب هیچی آقا از اونجا رفتیم و پیاده روی اربعین ما از اونجا شروع شد، از نجف پیاده رفتیم کربلا، 3 روز تو راه بودیم O_o ؛ متر به متر عراقی ها موکب زده بودن و از زائران استقبال میکردن(موکب شبیه ایستگاه صلواتی های سیار تو ایران هستش)…
خب دیگه داستان گفتن بسه بریم سر اصل مطلب… laugh

پروژه نمایش عکس در opencv

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

خط 1 : فراخونی کتابخونه مورد نیاز برای نمایش عکس.
خط 5 : عکسی که میخوایم نمایش بدیم رو آدرسش رو به عنوان پارامتر به تابع imread میدیم و این عکس در متغییر image از نوع Mat ذخیره میشه.
خط 6 : نمایش عکس در یه پنجره با نام تعیین شده ی “My Image”
خط 8 : این قسمت باعث میشه پنجره نمایش عکس بسته نشه، پارامتری که ما بهش میدیم زمان بر حسب ms هستش، و اگه پارامتری بهش ندیم(عددی ندیم بهش) و یا 0 بدیم، به عنوان زمان “بی نهایت” تلقی میشه، مثلا اگه کد زیر رو بنویسیم، پنجره بعد از 3 ثانیه بسته میشه.(این تابع همون delay خودمون هستش که باعث میشه کامپایلر یه زمانی رو وایسه و بقیه کد های برنامه رو اجرا نکنه)

خط 9 : کامپایلر وقتی به این خط برسه برنامه رو میبنده.
توجه : اینا رو یادتون باشه چون تو مطلب بعدی تکرار نمیکنم.
مطالب مرتبط : Loading an image in OpenCV
 
 

آموزش کتابخانه highgui

لیست توابع این کتابخانه opencv به صورت زیر هستش.

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

1) تابع namedWindow برای ایجاد یه پنجره جدید هستش.
پارامتر اول : نام پنجره
پارامتر دوم : این برا تعیین حالت پنجره(اندازش) هستش، اون پارامتر آخر رو من دقیقا نحوه استفادش رو بلد نیستم چون ازش استفاده میکنم برنامه ارور میده، حالا بعدا اگه یادم بود میرم روش ه تحقیقی میکنم(فعلا نه وقتش رو دارم و نه حسش)

 
 

2) تابع destroyWindow برای نابود کردن یه پنجره هستش(که به کمک تابع namedWindow ساختیمش)
پارامتر اول : نام پنجره ای که قراره نابود بشه.

مثالی از دو تابع بالا
در این مثال یه پنجره ایجاد میکنیم و بعد از 2 ثانیه پنجره نابود میشه و فقط پنجره کنسول اپلیکیشن باز میمونه.

 
 

3) تابع destroyAllWindows برای نابود کردن تمام پنجره های باز به کار میره.

مثالی از تابع destroyAllWindows
در برنامه زیر 6تا پنجره ساختیم و بعد 2 ثانیه تمام پنجره ها نابود(بسته) میشن و حتی پنجره کنسول اپلیکیشن

 
 

4) تابع waitKey برای ایجاد یه تاخیر زمانی هستش که در بالا به وفور ازش استفاده کردم و توضیح دادمش.
همون طور که یادتونه گفتم اگه 0 بدیم یا مقداری به تابع ندیم، تابع به مقدار بنهایت وای میسته(یه تاخیر زمانی بی نهایت)، چون همون طور که در تابع بالا میبینید پارامتر رو مقدار اولیه 0 دادن و لذا اگه شما مقدار 0 بدید و یا مقدار ندید هر دو مورد یکسان و یکی هستش.
 
 

5) تابع imshow برای نمایش یه عکس هستش که در اول برنامه یه مثال براش گزاشتم و توضیح هم دادم.
پارامتر اول : نام پنجره
پارامتر دوم : عکس ما(که قراره توسط این تابع نمایش داده بشه)
توجه : اگه قبل از این تابع پنجره ای ایجاد نشه(به کمک تابع namedWindow) این تابع خودش یه پنجره با مقدار CV_WINDOW_AUTOSIZE ایجاد میکنه.

مثالی از تابع imshow و namedWindow
خب گفتم اگه تابع namedWindow رو فراخونی نکنیم تابع imshow خودش یه پنجره با مقدار اولیه CV_WINDOW_AUTOSIZE ایجاد میکنه، ولی اگه نمیخواد این طور باشه باید قبل از تابع imshow بیاید و از تابع namedWindow استفاده کنید و پارامتر مد نظرتون رو تعیین کنید.
نکته مهم : نام پنجره در هر دو تابع باید حتما حتما یکسان باشه.
میتونید بعد از اجرای تابع برید و با پنجره ها ور برید و ویژگی هر کدوم رو ببینید، تو یکی عکس تغییر سایز پیدا نمیکنه، تو یکی پنجره تغییر سایز پیدا نمیکنه، تو یکی....
توجه : همون طور که قبلا گفتم نحوه کار دقیق WINDOW_OPENGL رو نمیدونم و بعدا میرم مطالعه میکنم(اگه یادم موندش^_^...حالا اگه کسی فهمید بگه)

 
 

6) تابع resizeWindow برای تغییر اندازه پنجره هستش(اندازه پنجره نمایش عکس رو تغییر میده و نه اندازخ عکس رو، دقت کنید)
پارامتر اول : نام پنجره(یا عکس، نام پنجره و عکس باید یکسان باشد)
پارامتر دوم : عرض عکس (اندازه افقی!)
پرامتر سوم : طول یا همون ارتفاع عکس (اندازه عمودی!)
 
توجه 1 : The specified window size is for the image area. Toolbars are not counted
توجه 2 : تمام پنجره های ایجاد شده با هر فلگی غیر از CV_WINDOW_AUTOSIZE رو میتونید تغییر سازش بدید.

مثالی از عملکرد تابع resizeWindow
در مثال زیر میبینید که اندازه پنجره نمایش عکس تغییر میکنه و نه اندازه عکس، چون ممکنه این شائبه براتون ایجاد بشه که این تابع عکس رو میبره و اندازه عکس رو تغییر میده و... این پروژه رو برای رفع این شائبه قرار میدم.
اول عکس نمایش داده میشه و بعد اندازه پنجره به 200 در 200 تغییر پیدا میکنه و بعد 2 ثانیه دوباره پنجره به اندازه اصلیش بر میگرده.
نکته آموزشی 1 : image.cols تعداد ستون های عکسی با نام image رو بر میگردونه.
نکته آموزشی 2 : image.rows تعداد سطر های عکسی با نام image رو بر میگردونه.

 
خب دیگه همین قدر برای جلسه اول کافیه، بقیش بمونه برای جلسه بعدی، شاید حدودا در کل 3 جلسه برای این کتابخونه نیاز باشه، در جلسه آخر، فیلم آموزش هر 3 جلسه قرار داده میشه(هم برا اطمینان از صحت پروژه ها و کد هایی که در بالا براتون گزاشتم و هم یه توضیح به صورت فیلم.)
اگه مطلب براتون مفید بود لطفا هزینه اونو بپردازید : برا سلامتی امام خامنه ای(مد ظله العالی) و علمای واقعی اسلام (و نه این عمامه انگلیسی ها)  و مسئولین خدمت گزار به مردم و اسلام 3 تا صلوات بفرستید و دعاشون کنید و 1 فاتحه برا شادی روح شهدای مدافع حرم و سلامتی بروبچه های مدافع حرم و رزمندگان اسلام و در آخر دعا کنید ما هم آدم بشیم و  لیاقت شهادت پیدا کنیم.
(یا رو ماشین لامبورگینی مفتی به کسی بده این قدر هزینه براش تعیین نمیکنه که من برا این مطلب ناچیز کردم laugh )
فعلا یا علی

پسورد فایل های سایت :
www.dmf313.ir
مهدی دمیرچیلو جنگ ما فتح قدس را در پی خواهد داشت (امام خمینی) >>>>>> اگر از صدام بگذریم، اگر مسأله قدس را فراموش کنیم، اگر از جنایت های امریکا بگذریم از آل سعود نخواهیم گذشت. ان‌شاالله اندوه دلمان را را در وقت مناسب با انتقام از امریکا و ال سعود برطرف خواهیم کرد و داغ و حسرت حلاوت این جنایت بزرگ را بر دلشان خواهیم گذاشت و با برپایی جشن پیروزی حق بر جنود کفر و نفاق و آزادی کعبه از دست نااهلان و نامحرمان به مسجد الحرام وارد خواهیم شد (امام خمینی)
ارسال دیدگاه
7

1) تعداد حروف غیر فارسی از حروف فارسی بیشتر باشه دیدگاه به صورت خودکار حذف میشه.

2) به موارد درخواست پروژه/کد آماده و سوالاتی که بلد نباشم پاسخ داده نمیشه.

3) برای گزاشتن کدهاتون از این سایت استفاده کنید : debian

  1. Avatar

    مهمان

    F

    سلام من یه سوال از حضورتون داشتم
    وقتی یه سون سگمنت رو بخوایم به میکرو وصل کنیم میآیم از آی سی 7447 استفاده میکنیم که پایه زیادی از میکرو اشغال نشه
    خب اعداد در مبنای دو 4 بیتی میشن
    حالا سوال من اینه که :
    4 بیت عدد به ای سی وارد میشن و 4 بیت بعدی به میکرو؟؟!!!!! هرچندعدد 8 بیتی که نیست 4 بیته
    یا عدد خودش 4 بیته و این 4 بیت وارد ای سی میشن و همین 4 بیت به میکرو وصل میشن؟؟؟؟
    آخه میخواد بدونم به چه علت وقتی دوتا سون سگمنت داریم فقط از یه پورت مثلا B استفاده میکنیم
    خودم فکر میکنم دومی درسته ولی استادمون یه چیز مث اولی گفته من الان هنگم

    1396/08/13
    01:32
  2. Avatar

    مهمان

    yaser

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

    1396/08/12
    11:36
  3. Avatar

    مهمان

    ashkan

    سلام.من وقتی یه برنامه رو می خوام run کنم مینویسه فایل PDB رو پیدا نمیکنه!!!شما میدونید مشکلش چیه؟؟

    1395/11/20
    12:09
  4. Avatar

    مهمان

    ashkan

    سلام.ببخشید وقتی من می خوام برنامه ای رو که نوشتم رو run کنم.مینویسه که فایل PDB رو پیدا نمیکنه!! شما میدونید مشکلش کجاست؟؟کتابخونه های open cv فرقی نداره تو کدوم درایو نصب بشه؟؟؟؟

    1395/11/20
    12:03
  5. Avatar

    مهمان

    یاسر

    aliiiiii bod mohandes khoda qovat

    1395/09/20
    01:11
  6. Avatar

    مهمان

    mre

    سلام
    خدا قوت خیلی عالیه. اگه امکانش هست،ادامه بدید مباحثی مثل تشخیص صورت،چهره،آدم و …
    اگه امکانش هست،یه آموزش هم از تولید فایل exe با c++ هم بذارید تا بشه برنامه هایی که می نویسیم رو روی رسپری یا هر کامپیوتر دیگه اجرا کنیم.
    با تشکر فراوون

    1395/04/28
    07:23
    • مهدی دمرچیلو

      نویسنده این مطلب

      مهدی دمرچیلو

      سلام
      قسمت دمت حرفت رو متوجه نشدم.

      1395/05/09
      09:41