کار با تصاویر در OpenCV-Python
آموزش کار با تصاویر در OpenCV-Python
مرداد ۱۶, ۱۳۹۷
دانلود کتاب opencv-python پروژه محور پردازش تصویر
دانلود کتاب opencv-python پروژه محور پردازش تصویر
مرداد ۲۳, ۱۳۹۷
نمایش همه

آموزش کار با ویدئو در OpenCV-Python

OpenCV-Python آموزش کار با ویدئو در

OpenCV-Python آموزش کار با ویدئو در

هدف

در این قسمت از آموزش کار با ویدئو در OpenCV-Python یاد میگیرید که :

ویدیو را بخوانید، ویدیو را نمایش داده و ویدئو را ذخیره کنید.

از دوربین عکس بگیرید و آن را نمایش دهید.

شما این توابع را یاد خواهید گرفت  : ()cv2.VideoCapture()، cv2.VideoWriter

 

Capture کردن ویدئو از دوربین

اول از همه بایستی ویدئو را با دوربین Capture  کنیم.  OpenCV یک رابط کاربری بسیار ساده برای این کار فراهم می کند. بیایید تصویری از دوربین بگیریم (من از وب کم داخلی لپ تاپ خود استفاده می کنم) و اونو تبدیل به یک فیلم سیاه و سفید می کنم و نمایشش میدم. فقط یک کار ساده برای شروع.

برای Capture کردن یک ویدئو ، شما باید یک شی VideoCapture ایجاد کنید. آرگومان ورودی آن می تواند یا شماره دوربین (از ۰ الی آخر) یا نام یک فایل ویدئویی باشد. به طور معمول یک دوربین به سیستم وصل خواهد بود (همانطور که در مورد من هست). بنابراین من به سادگی با وارد کردن  ۰ (یا -۱) تصویر دوربین را  Capture  میکنم. شما می توانید دوربین دوم با وارد کردن ۱ و غیره را انتخاب کنید. بعد، می توانید فریم به فریم تصاویر را دریافت کنید. اما در نهایت فراموش نکنید که Capture را آزاد کنید.

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

while(True):
    # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

()cap.read  یک بول  (True / False)  را باز می کند و در متغیر ret  می ریزد. اگر فریم درست خوانده شود، درست خواهد بود. بنابراین با بررسی این مقدار بازگشتی می توانید پایان ویدیو را بررسی کنید. همچنین فریم جاری را در متغیر frame می ریزد.

 

Cap گاهی اوقات ممکن است عملیات capture کردن را راه اندازی نکرده باشد. در این صورت، خطا می دهد. شما می توانید با روش ()cap.isOpened چک کنید که آیا capture کردن راه اندازی شده یا نه. اگر True باشد، همه چیز درست است. در غیر این صورت آن را با استفاده از ()cap.open باز کنید.

 

شما همچنین می توانید به برخی از ویژگی های ویدئو با استفاده از روش (cap.get(propId که در آن propId عددی است از ۰ تا ۱۸ ، دسترسی پیدا کنید. هر عدد یک مشخصه ویدئویی (اگر برای آن ویدیو استفاده می شود) مشخص می کند. جزئیات کامل را می توانید اینجا را ببینید  Property Identifier برخی از این مقادیر را می توان با استفاده از  (cap.set(propId, value اصلاح کرد. value مقدار جدیدی است که می خواهید وارد کنید.

 

برای مثال،  من میتونم عرض و ارتفاع فریم ویدیو خودم را با (cap.get(3 و (cap.get(4 بررسی کنم. .خروجی این کد برای من اندازه فریم ویدیو یعنی ۶۴۰*۴۸۰ خواهد بود.  اما من می خوام که آن را به ۳۲۰*۲۴۰ تغییر دهم. تنها کاری که لازمه بکنم اینه :  (ret = cap.set(3,320  و (ret = cap.set(4,240

نکته : اگر خطایی دریافت کردید مطمئن شوید که دوربین شما درست نصب شده و کار می کند . برای این کار از برنامه های مشاهده وب کم استفاده کنید مثلا manyCam  در ویندوز و cheese در لینوکس .

پخش ویدئو از فایل

دقیقا مثل دریافت ویدیو از دوربین است، فقط به جای شماره دستگاه نام فایل (در پوشه مسیر جاری) ویدئویی یا آدرس کامل آن را وارد می کنیم. همچنین در هنگام نمایش فریم، از زمان مناسب برای تنظیم سرعت پخش ویدیو استفاده می کنیم ()cv2.waitKey . اگر کم باشد، ویدیو بسیار سریع خواهد بود و اگر زیاد، ویدیو کند خواهد شد (با این روش می توانید ویدیوها را در حالت آرام نمایش دهید).

import numpy as np
import cv2

cap = cv2.VideoCapture('vtest.avi')

while(cap.isOpened()):
    ret, frame = cap.read()

    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    cv2.imshow('frame',gray)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

نکته : اطمینان حاصل کنید که نسخه مناسب ffmpeg یا gstreamer نصب شده است. گاهی اوقات مشکلات زیادی برای کار با ویدئو به دلیل نصب اشتباه ffmpeg / gstreamer بوجود می آید.

ذخیره کردن ویدیو

تا الان ما یک ویدیو را capture کردیم ، فریم به فریم پردازش کردیم و نمایش دادیم حالا می خواهیم این ویدیو را ذخیره کنیم. برای تصاویر، کار بسیار ساده بود، فقط از ()cv2.imwrite استفاده می کردیم. برای ویدیو ها یکمی بیشتر کار میبره .

اول یک شی VideoWriter ایجاد میکنیم. ما باید نام فایل خروجی (مثلا: output.avi) را مشخص کنیم. سپس باید کد FourCC  را مشخص کنیم (جزئیات در پاراگراف بعدی). سپس تعداد فریم ها در ثانیه (fps) و اندازه فریم باید منتقل شود. و آخرین آیتم پرچم isColor  است. اگر درست باشد، انکدر فرمت رنگی را انتقال می دهد، در غیر اینصورت با فریم سیاه و سفید کار می کند.

FourCC  یک کد ۴ بایتی است که برای مشخص کردن کدک ویدیو. لیست کدهای موجود را می توانید در fourcc.org بیابید. بستگی به پلتفرمتون داره.

کد زیر تصویر را از دوربین وب کم Capture  میکند بعد هر فریم را به صورت عمودی می چرخاند و در نهایت در مسیر جاری در فایل output.avi  ذخیره می کند .

import numpy as np
import cv2

cap = cv2.VideoCapture(0)

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480))

while(cap.isOpened()):
    ret, frame = cap.read()
    if ret==True:
        frame = cv2.flip(frame,0)

        # write the flipped frame
        out.write(frame)

        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    else:
        break

# Release everything if job is finished
cap.release()
out.release()
cv2.destroyAllWindows()

 

قسمت قبلی : آموزش کار با تصاویر در OpenCV-Python

قسمت بعدی : توابع طراحی در Opencv-Python

مرتضی حاتمی
مرتضی حاتمی
علاقمند به یادگیری موضوعات جدید و حل مسائل ، دوستدار محیط زیست ، معتقد به تعادل و تکامل ، علاقمند به موسیقی

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *