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

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

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

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





آموزش opencv

 

7) تابع moveWindow برای جابجایی کردن پنجره(ی نمایش عکس و یا …) هستش.
پارامتر اول : نام پنجره
پارامتر دوم : مختصات x از صفحه نمایشون
پارامتر سوم : مختصات y از صفحه نمایشون

پروژه opencv

مثالی از عملکرد تابع
خب تو مثال زیر اول عکس نمایش داده میشه و بعد 2 ثانیه میره تو مختصات 50و50 و بعد دو ثانیه میره تو مختصات 100و100 و بعد دو ثانیه برنامه بسته میشه.

 
 
8) تابع setWindowTitle برای تغییر نام یه پنجره هستش.
پارامتر اول : نام پنجره ای که میخوای نامش رو تغییر بدید.
پارامتر دوم : نام جدید برای پنجره انتخاب شده.
مثالی از تابع setWindowTitle
خب در اینجا ما یه عکس نمایش میدیم و بعد از 2 ثانیه نامش رو تغییر میدیم و بعد 2 ثانیه برنامه بسته میشه.

 
 
خب کم کم داریم میرسیم به توابع خوب و کاربردی و به قول c# کار ها …. بگذریم یادم نمیاد bad
راستی به این محیط گرافیکی که باتن، تری ویو و… وجود داره چی میگفتن؟ یادم نمیاد laugh
یه محیط کونسول اپلیکیشن داشتیم و یه…؟
بگذریم زیاد مهم نیست pardon
 
 

9) تابع createTrackbar برای ساخت یه ترک بار(اسلایدر) هستش(که در زیر عکسش رو میبینید)
تابع createTrackbar
پارامتر اول : نام Trackbar یی که میخواین بسازین.
پارامتر دوم : نام پنجره ای که این Trackbar باید توش نمایش داده بشه.
پارامتر سوم : مقدار پیشفرض Trackbar (مثلا تو شکل بالا مقدار پیش فرض 42 هستش، یعنی وقتی برنامه شروع به کار میکنه مقدار Trackbar برابر 42 هستش.)
پارامتر چهارم : طول Trackbar هستش، مثلا میتونید 100 قرار بدید(یعنی از 0 تا 100) و یا 10 قرار بدید(از 0 تا 10)
پارامتر پنجم : اگه تغییری در مقدار Trackbar ایجاد بشه این تابعی که ما اسمش رو به عنوان پارامتر دادیم فراخونی میشه.(یعنی این تابع تنها زمانی فراخونی میشه که مقدار ترک بار تغییر کنه، که این مورد برا ما خیلی مهم هستش و ازش استفاده میکینم حتما)
پارامتر ششم : نمیدونم فعلا.
توجه : مورد زیر رو اگه کسی در عمل متوجه شد به ما هم بگه.(این توجه برای توابع 9تا12 هستش)
winname can be empty (or NULL) if the trackbar should be attached to the control panel
 
 

10) تابع setTrackbarPos برای تنظیم مقدار ترک بار هستش، مثلا در شکل بالا مقدار Trackbar برابر 42 هستش که توسط این تابع میتونیم مقدارش رو تغییر بدیم.
پارامتر اول : نام ترک باری که میخواید مقدارش رو تغییر بدید.
پارامتر دوم : نام پنجره ای که ترک بار در اون قرار داره.
پارامتر سوم : مختصات(مقدار) جدید Trackbar
 
 

11) تابع getTrackbarPos برای خوندم مقدار ترک بار هستش، مثلا اگه این تابع مقدار ترک بار عکس بالا رو بخونه، عدد 42 رو بر میگردونه.
پارامتر اول : نام ترک بار(یی که میخواید مقدارش رو بخونید)
پارامتر دوم : نام پنجره ای که ترک بار مد نظر شما در اون قرار داره.
 
 

12) تابع setTrackbarMax برای تنظیم طول ترک بار هستش(که ما همچنین در هنگام ایجاد ترک بار به کمک تابع createTrackbar میتونستیم همون جا مقدار Max ترک بار رو تغییر بدیم و بعضی جاها نیاز میشه که دوباره مقدار ماکزیمم ترک بار تغییر کنه که باس از این تابع استفاده کرد.)
پارامتر اول : نام ترک بار مد نظر
پارامتر دوم : ناپ پنجره ای که ترک بار مد نظرتون داخلش قرار داره.
پارامتر سوم : تعیین مقدار حداکثر ترک بار انتخاب شده.

پروژه opencv

مثالی از 4 تابع بالا(توابع 9 تا 12)
خب در این مثال ما یه پنجره با نام image ایجاد میکنیم(خط6) و بعد یه ترک بار با نام Trackbar2 و در پنجره image و با مقدار حداکثر 1023 و مقدار اولیه 0 ایجاد میکنیم(خط8)، و بعد در خط10 میایم و مقدار اولیه Trackbar2 رو به 50 تغییر میدیم و در خط 12 میایم و مقدار حداکثر ترک بار(که 1023 بودش) رو به 100 تغییر میدیم.
و بعد در خطوط 14-18 میایم حی مقدار ترک بار رو بررسی میکنیم و در پنجره کنسول اپلیکیشن نمایش میدیم، و این کار رو با تاخیر 10 میلی ثانیه ای انجام میدیم(خط 17)

 
پروژه دوم(این پروژه و پروژه بالا رو مقایسه کنید)
خب تو پروژه بالا مقدار ترک بار به طور مداوم تو کونسول اپلیکیشن نشون داده میشد ولی تو پروژه زیر مقدار ترک بار هر بار تغییر کنه نمایش داده میشه، که تو این پروژه اومدم از پارامتر 5ام تابع createTrackbar استفاده کردم برای این کار.
مشکلات من : پارامتر userdata در تابع myFunc و پاراکتر ششم تابع createTrackbar
توجه مهم : دفت کنید که چرا خط 12 رو به صورت تضیحات در ابردم و از خط 13 استفاده کردم، که فرق این دو در پارامتر 3ام تابع هستش، بشینید یکم فکر و تحقیق کنید در این باره.

 
 

13) توابع مخصوص OpenGL : خب این چند تا تابع مربوطه به OpenGL که این توابع از کتاب خونه OpenGL (فک کنم درست گفتم) استفاده کردن و فعلا ما کاری بهش نداریم چون نحوه کار OpenGL رو نمیدونیم، مطلب زیر رو بخونید درباره OpenGL

  1. OpenGL چیست ؟
  2. مقاله آشنایی با opengl
  3. فرق بین OPENGL و DirectX چیست ؟
  4. OpenGL چیست؟
  5. سایت OpenGL
  6. رندرینگ (گرافیک رایانه‌ای)

 
 

14) توابع مخصوص QT : خب توابع بالا هم اون طوری که از توضیحات سایت OpenCV و کتاب خونه فوق من خوندم مثل این ک مختص QT هستش.(ما هم کم کم میریم سمت QT فعلا یکم با Visual Stedio کار میکنیم تا بعد^_^)
خب میدوم همتون خسته شدید از این که مطلب همش اومده یه سری توابع رو توضیح داده و بعد مثال زده، قبول دارم یکم کسل کننده هستش pardon ولی خب میگید چیکار کنم؟ نظر بدید، منم یه نفر هستم آخه rtfm
حالا این توضیح توابع تموم بشه میریم سراغ انجام پروژه انشاالله. smile
 
 

نکته آموزشی : استفاده از فضای نامی cv برای ساده کردن پروژه های opencv

خب تو پروژه های بالا اگه دیده باشید ما برای استفاده از هر تابع opencv مجبوریم ابتدا بنویسیم ::cv که این کار در تعداد بالا یکم جالب نیستش، و لذا بعد از تعریف کتابخونه ها میتونیم تکه کد زیر رو قرار بدیم تا دیگه مجبور نباشیم از ::cv استفاده کنیم در اول هر تابع و متغییر و... ی opencv

 
 
خب حالا بریم چند تا تابع کاربردی که میتونه حسابی مفید باشه رو با هم بررسی کنید. cool
راستی یه خبر خوب، این مطلب آخر هستش و از مطلب جلسه 3ام خبری نیستش و جلسه بعد میریم سراغ یه کتابخونه دیگه.
و یه خبر خوب دیگه، فیلم این دو جلسه هم تو همین مطلب قرار میگیره، حالا شاید مطلب رو منتشر کنم و فرداش بشینم فیلمش رو آماده کنم؛ حالا اگه کسی خواست زود تر هم میشه آمادش کرد. heart
 
 

15) تابع setMouseCallback همون مختصات موس که روی عکس مد نظر ما قرار داره رو + یه سری چیزای دیگه بر میگردونه، مثلا میگه موس در مختصات پیکس 10 و 15 عکس قرار داره.(حالا کلا موس هر چی داره این تابع میتونه مقدارش رو به دست بیاره، مختصات موس در عکس، کلیک چپ و یا راست شدن موس، رها کلیک راست و یا چپ موس، چرخش اون دایره وسط موس!!! ^_^  —> جان داش اسمش رو نمیدونم ^_^)
در کل این تابع همون طور که از اسمش معلومه(Callback) یه تابع باید براش ایجاد کنیم و هر موقع تغییری در هر کدوم ا متغییر های موس ایجاد بشه تابع مد نظر ما اجرا میشه و ما میتونیم پارامتر های موس رو بررسی کنیم و بر طبقش تصمیم مد نظرمون رو بگیریم.
پارامتر اول : نام پنجره ای که متخصات موس در اون پنجره محاسبه خواهد شد.
پارامتر دوم : نام تابعی که در صورت تغییر در پارامتر های موس این تابع اجرا میشه.
پارامتر سوم : اینو نمیدونم.

پروژه opencv

دو مثال از عملکرد تابع setMouseCallback
خب مثال زیر، مثال اول ما هستش برا این تابع، در زیر چند تا نکته آموزشی مربوط به این مثال رو ذکر میکنم.
نکته آموزشی 1 : در خط 8 یه متغییر(با نام MousePoint) از نوع Pointایجاد کردیم، که این نوع از متغییرها برای ذخیره یه x و y به کار میرن؛ مثلا در خطوط 12 و 13 اومدم و مقدار x و y متغییر MousePoint رو تغییر دادم.

 
مثال دوم : خب یه روش دیگه هم هستش که متغییر رو برای تابع مد نظر میفرستیم و اون تابع مقادیر رو داخل متغییر ما ذخیره میکنه و ما در تابع main میایم و مقدار اون متغییر رو نشون میدیم.
نکته آموزشی 2 : به خطوط 10-9 و 12-11 توجه کنید، برای دسترسی به مقدار اشاره گر ها از هر یک از دو روش موجود میشه استفاده کرد، هر چند که روش اول رو برای ساده کردن کار با اشاره گرها درست کردن.(عجب نکته آموزشی پر باری laugh  اینو گفتم برید درباره اشاره گرها مطالعه کنید هر چند که من خودم یه مطلب ازش تو سایت گزاشتم قبلا : آموزش جامع اشاره گرها در Pointer Tutorial in C )

 
 

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

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

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

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

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

  1. Avatar

    مهمان

    Yaser

    خدا قوت لطفا ادامه بدین،اجرکم عندالله

    1396/08/13
    12:12
  2. Avatar

    مهمان

    جواد

    داداش حرف نداری…ادامه بده کاراتو که پیگیرم شدید

    1395/10/27
    02:40
  3. Avatar

    مهمان

    mre

    سلام.باز هم خدا قوت …

    1395/04/28
    08:21
  4. Avatar

    مهمان

    محمد

    سلام داداش دستت درد نکنه بابت پروژه هایی که میذاری خیلی ممنونم اذت
    واقعا کار خوبی کردی که رفتی سمت پردازش تصویر چون خیلی کاربرد داره
    و منم شدیدا لنگ یاد گرفتنشم heart

    1395/04/22
    08:17