Skip to content

Commit

Permalink
Update 03.StartWithVideo.md
Browse files Browse the repository at this point in the history
  • Loading branch information
opaip committed Jul 25, 2024
1 parent 3e8dc32 commit b8c5396
Showing 1 changed file with 15 additions and 15 deletions.
30 changes: 15 additions & 15 deletions src/03.StartWithVideo.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

## اهداف

* یادگیری خواندن و نوشتن و ذخیره ویدیو
* یادگیری رفتن تصویر از دوربین و ذخیره آن به صورت ویدیو
* یادگیری خواندن و نوشتن و ذخیره ویدیو.
* یادگیری گرفتن تصویر از دوربین و ذخیره آن به صورت ویدیو.
* یادگیری توابع `cv.VideoCapture()` و ` cv.VideoWriter()`


Expand All @@ -14,7 +14,7 @@
به صورت یک ویدیو شدتی(سفید و سیاه) نشان دهیم

برای گرفتن ویدیو نیاز داریم یک آبجکت `VideoCapture` بسازیم.
ویودی های آن میتواند نام فایل یا ایندکس وسیله گیرنده ویدو باشد.
ورودی های آن میتواند نام فایل یا ایندکس وسیله گیرنده ویدیو باشد.
ایندکس یک وسیله گیرنده مانند دوربین فقط عددی است که به آن وسیله تخصیص داده شده.
معمولا به لپتاپ یا کامپیوتر ما یک وسیله وصل است به همین دلیل من اینجا عدد 0 (یا1) رو وارد میکنم.

Expand Down Expand Up @@ -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 برای حالت عادی مناسب است.

Expand All @@ -93,13 +93,13 @@ while cap.isOpened():
cap.release()
cv.destroyAllWindows()
```
* مطمئن شوید که `ffmpeg` یا `gstreamer` به درستی روی سیستم شما نصب شده باشد , درغیر اینصورت کار کردن در کارکردن با این کتابخانه به مشکل خواهید خورد.
* مطمئن شوید که `ffmpeg` یا `gstreamer` به درستی روی سیستم شما نصب شده باشد , درغیر اینصورت در کارکردن با این کتابخانه به مشکل خواهید خورد.

## ذخیره ویدیو

خب تا اینجا ما ویدیو رو گرفتیم و فریم به فریم پردازش روی اون انجام دادیم و حالا میخواهیم اون رو ذخیره کنیم.

برای عکس ها خیلی راحت است و از دستور `cv.imwrite()` استفاده می‌کنیم.
برای عکس ها خیلی راحت است و از دستور `()cv.imwrite` استفاده می‌کنیم.
اما برای ویدیو یکم بیشتر کار داریم.

در اینجا یک آبجکت `VideoWriter` میسازیم. باید نام فایل خروجی را مشخص کنیم.
Expand Down

0 comments on commit b8c5396

Please sign in to comment.