diff --git a/src/03.StartWithVideo.md b/src/03.StartWithVideo.md index 2c379a7..30ac86b 100644 --- a/src/03.StartWithVideo.md +++ b/src/03.StartWithVideo.md @@ -2,8 +2,8 @@ ## اهداف -* یادگیری خواندن و نوشتن و ذخیره ویدیو -* یادگیری رفتن تصویر از دوربین و ذخیره آن به صورت ویدیو +* یادگیری خواندن و نوشتن و ذخیره ویدیو. +* یادگیری گرفتن تصویر از دوربین و ذخیره آن به صورت ویدیو. * یادگیری توابع `cv.VideoCapture()` و ` cv.VideoWriter()` @@ -14,7 +14,7 @@ به صورت یک ویدیو شدتی(سفید و سیاه) نشان دهیم برای گرفتن ویدیو نیاز داریم یک آبجکت `VideoCapture` بسازیم. -ویودی های آن میتواند نام فایل یا ایندکس وسیله گیرنده ویدو باشد. +ورودی های آن میتواند نام فایل یا ایندکس وسیله گیرنده ویدیو باشد. ایندکس یک وسیله گیرنده مانند دوربین فقط عددی است که به آن وسیله تخصیص داده شده. معمولا به لپتاپ یا کامپیوتر ما یک وسیله وصل است به همین دلیل من اینجا عدد 0 (یا1) رو وارد میکنم. @@ -46,28 +46,28 @@ cap.release() cv.destroyAllWindows() ``` -`cap.read` `True` یا `False` رو بر میگردوند که نشون دهنده اینه که آیا فریم ها به درستی خوانده می‌شوند یا خیر. +`cap.read` مقادیر `True` یا `False` رو بر میگردوند که نشون دهنده اینه که آیا فریم ها به درستی خوانده می‌شوند یا خیر. با این مقدار برگشتی میتونید بفهمید به آخر ویدیو رسیده‌اید یا خیر. -بعضی مواقع ممکن است `cap` که گیرنده ویدیو رو به اجرا در نیاورده باشد. +بعضی مواقع ممکن است `cap` گیرنده ویدیو رو به اجرا در نیاورده باشد. شما می‌توانید با استفاده از `cap.isOpened()` این موضوع رو چک کنید . این تابع مقادیر `True` یا `False` رو بر می‌گردوند. -اگر False رو برگدوند میتواند با استفاده از `cap.open()` گیرنده رو به اجرا درآورید -همچنین شما به میتوانید به بعضی از ویژگی های ویدیو توسط تابع `cap.get(n)` دسترسی داشته باشید که n عددی است از 0 تا 18 -هر عدد به یک ویژگی ارتباط دارد +اگر `False` رو برگدوند میتواند با استفاده از `cap.open()` گیرنده رو به اجرا درآورید. +همچنین شما به میتوانید به بعضی از ویژگی های ویدیو توسط تابع `cap.get(n)` دسترسی داشته باشید که n عددی است از 0 تا 18 و +هر عدد به یک ویژگی ارتباط دارد. -اطلاعات کامل آن توسط تابع `cv::VideoCapture::get()` قابل مشاهده است. +اطلاعات کامل آن توسط تابع `()cv::VideoCapture::get` قابل مشاهده است. همچنین بعضی از این مقادیر توسط تابع `cap.set(n, value)` قابل تغییر هستند. value مقدار دلخواهی شما است که میخواهد ویژگی مربوط به n آن را تغییر دهید. به عنوان مثال میتوانیم ارتفاع و عرض فریم رو با دستور `cap.get(cv.CAP_PROP_FRAME_WIDTH)` و `cap.get(cv.CAP_PROP_FRAME_HEIGHT)` مشاهده کنیم. درحالت پیش‌فرض مقدار `640x480 ` داده می‌شود. -اما میخواهم این مقدار را به `320x240` تغییر دهم. برای این کار از دستور `ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320)`و, `ret = cap.set(cv.CAP_PROP_FRAME_HEIGHT,240)` استفاده میکنم +اما میخواهم این مقدار را به `320x240` تغییر دهم. برای این کار از دستور `ret = cap.set(cv.CAP_PROP_FRAME_WIDTH,320)`و `ret = cap.set(cv.CAP_PROP_FRAME_HEIGHT,240)` استفاده میکنم. -* اگر خطا دریافت میکنید مطمئن شوید دوربین دستگاه به درستی کار میکند +* اگر خطا دریافت میکنید مطمئن شوید دوربین دستگاه به درستی کار میکند. ## پخش ویدیو از یک فایل -پخش کردن ویدیو مانند گرفتن ویدیو است با این تغییر که به جای شماره دستگار دریافت کنند باید نام فایل رو وارد کنید. -همچنین هنگگام پخش ویدیو از مقدار مناسبی برای `cv.waitKey()` استفاده کنید. +پخش کردن ویدیو مانند گرفتن ویدیو است با این تغییر که به جای شماره دستگاه دریافت کنند باید نام فایل رو وارد کنید. +همچنین هنگام پخش ویدیو از مقدار مناسبی برای `cv.waitKey()` استفاده کنید. اگر کوچک باشد ویدیو خیلی سریع پخش میشود و اگر بزرگ باشید ویدیو خیلی کند پخش می‌شود عدد 25 برای حالت عادی مناسب است. @@ -93,13 +93,13 @@ while cap.isOpened(): cap.release() cv.destroyAllWindows() ``` -* مطمئن شوید که `ffmpeg` یا `gstreamer` به درستی روی سیستم شما نصب شده باشد , درغیر اینصورت کار کردن در کارکردن با این کتابخانه به مشکل خواهید خورد. +* مطمئن شوید که `ffmpeg` یا `gstreamer` به درستی روی سیستم شما نصب شده باشد , درغیر اینصورت در کارکردن با این کتابخانه به مشکل خواهید خورد. ## ذخیره ویدیو خب تا اینجا ما ویدیو رو گرفتیم و فریم به فریم پردازش روی اون انجام دادیم و حالا میخواهیم اون رو ذخیره کنیم. -برای عکس ها خیلی راحت است و از دستور `cv.imwrite()` استفاده می‌کنیم. +برای عکس ها خیلی راحت است و از دستور `()cv.imwrite` استفاده می‌کنیم. اما برای ویدیو یکم بیشتر کار داریم. در اینجا یک آبجکت `VideoWriter` میسازیم. باید نام فایل خروجی را مشخص کنیم.