نحوه فعال سازی و استفاده از وبکم در opencv
به وسیله تابع ()VideoCapture وبکم را راه اندازی می کنیم که خروجی آن یک شی (object) می باشد که در اینجا آن را در متغیر cap قرار داده ایم.
این شئ یک متد به نام ()read دارد که با فراخوانی آن وبکم فعال می شود و شروع به دریافت فریم ها از وبکم میکند.
خروجی تابع ()read نوع داده ای tuple در پایتون است که در اینجا آن را در متغیرهای frame و ret ذخیره کرده ایم.
frame همان تصاویر دریافتی از وبکم است و چیزی که در ret ذخیره شده یک boolean است که نشان می دهد که آیا عملیات موفق آمیز بوده یا نه.
به وسیله تابع ()cap.release هم می توان وبکم را آزاد کرده و در نتیجه وبکم خاموش میشود.
به کد زیر دقت کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import cv2 # Initialize webcam, cap is the object provided by VideoCapture # It contains a boolean indicating if it was sucessful (ret) # It also contains the images collected from the webcam (frame) cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() cv2.imshow('Webcam', frame) if cv2.waitKey(1) == 13: #13 is the Enter Key break # Release camera and close windows cap.release() cv2.destroyAllWindows() |
قاعدتا میتوان روی تصاویری که از وبکم دریافت میکنیم قبل از نمایش تغییراتی ایجاد کنیم. به دو مثال زیر دقت کنید.
مثال 1) نمایش در وبکم به صورت آینه ای یا برعکس (flip)
یادآوری:
تصویر اصلی
چرخش عمودی یا Vertical Flip
چرخش افقی یا Horizontal Flip
برای flip کردن تصاویر دریافتی از وبکم از تابع ()cv2.flip استفاده می کنیم که آرگومان اول تصاویر دریافتی است و آرگومان دوم نوع flip را مشخص می کند به این صورت که:
- اگر صفر باشد: به صورت عمودی تصاویر را flip می کند.
- اگر مثبت باشد:به صورت افقی تصاویر را flip می کند.
- اگر منفی باشد:به صورت هم عمودی و هم افقی تصاویر را flip می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
import cv2 cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() flipped = cv2.flip(frame, 1) cv2.imshow('Webcam', flipped) if cv2.waitKey(1) == 13: #13 is the Enter Key break # Release camera and close windows cap.release() cv2.destroyAllWindows() |
مثال 2) نمایش تک کاناله با وبکم
در این کد ابتدا به اندازه طول و عرض فریم یک ماتریس با مقادیر صفر می سازیم سپس هر کانال رنگی که از وبکم دریافت می شود را جدا می کنیم و در نهایت هر کانال را به صورت جداگانه نمایش می دهیم؛ به این صورت که با تابع ()cv2.merge فقط همان کانال رنگی و به جای دو کانال دیگر همان ماتریس صفری که ساخته بودیم را به عنوان ورودی می دهیم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import cv2 import numpy as np cap = cv2.VideoCapture(0) while True: ret, frame = cap.read() height, width, _ = frame.shape zeros = np.zeros([height,width], dtype = "uint8") B, G, R = cv2.split(frame) image_green = cv2.merge([zeros, G, zeros]) image_red = cv2.merge([zeros, zeros, R]) cv2.imshow('Webcam Green', image_green) cv2.imshow('Webcam Red', image_red) if cv2.waitKey(1) == 13: #13 is the Enter Key break # Release camera and close windows cap.release() cv2.destroyAllWindows() |
شبکه های اجتماعی