پردازش تصویر با پایتون قسمت ششم

 

در این قسمت ، شما نحوه نمایش تصویر را با استفاده از تابع ()cv2.imshow در OpenCV خواهید آموخت. 
 

 نمایش یک تصویر در  OpenCv

 

از تابع ()cv2.imshow  برای نمایش یک تصویر در یک پنجره استفاده می کنیم. پنجره به طور خودکار با اندازه تصویر متناسب می شود.

 

دو آرگومان دارد. اولین آرگومان نام پنجره است که یک رشته میباشد. آرگومان دوم تصویری است که با خواندن  آن، در یک متغیر ذخیره کردیم. شما میتوانید تعداد بیشتری پنجره با یک عکس ایجاد کنید ولی باید نام عکسها متفاوت باشد. 


import cv2
img = cv2.imread('test.png') 
cv2.imshow('opencv',img)
c = cv2.waitKey(0)
cv2.destroyAllWindows()

11
cv2.imshow()
 


()cv2.waitKey 

Waits for a pressed key(منتظر برای فشار دادن یک کلید ازصفحه کلید).  یک تابع اتصال به  صفحه کلید است. یک آرگومان دارد که زمان در میلی ثانیه است.


cv2.waitKey([delay]) → retval

 

پارامتر ها

delay : تاخیرزمان به میلی ثانیه . ۰ به عنوان آرگوان ورودی مقدار ویژه ای است به معنای “بی وقفه” است.
اگر  (\texttt{delay}\leq 0 ) باشد یعنی پنجره برای مدت نامحدودی منتظر می ماند تا زمانی یک کلید از صفحه کلید را فشار دهیم و آن بسته شود. 

اگر مقدار delay  مثبت باشد مثلا ۱۰۰۰، بعد از یک ثانیه پنجره به صورت خودکار بسته میشود. 

این تابع یا کد کلید فشار داده شده از صفحه کلید را بر میگرداند یا -۱(یعنی کلیدی  قبل از زمان مشخص فشار داده نشده . برای من ۲۵۵ بر میگرداند.) 

نکته 

این تابع زمانی کار میکند که  حداقل یک پنجره HighGUI ایجاد شده و پنجره فعال باشد. اگر چندین پنجره HighGUI وجود داشته باشد، هر کدام از آنها می توانند فعال باشند. چون waitKey تنها متدHighGUI  است که میتواند رویداد ها را اداره کند.

در حالی که OpenCV برای استفاده در برنامه های کاربردی تمام عیار طراحی شده است و می تواند در چارچوب های عملکردی غنی از UI (مانند Qt *، WinForms * یا Cocoa *) یا بدون استفاده از رابط کاربری مورد استفاده قرار گیرد، گاهی اوقات لازم است که سرعت عمل را امتحان و نتایج را تصور کنید. این همان چیزی است که ماژول HighGUI برای آن طراحی شده است.

تابع destroyAllWindows تمام پنجره های باز شده HighGUI را از بین می برد.

قطعه کد زیر نشان میدهد که اگر کلیدی فشار داده نشود تصویر بی وقفه نمایش داده میشود، تا زمانی که یک کلید فشار دهیم یا خودمان پنجره را ببندیم.


import cv2

def sufra():
 img = cv2.imread('test.png')
 cv2.imshow('image', img)
 cv2.waitKey(0)
 cv2.destroyAllWindows()
 print ("waitkey")

if __name__ == '__main__':
 sufra()

waitkey
>>> 

با قطعه کد زیر، فشار دادن یا ندادن کلید از صفحه کلید، کد اسکی آن برگردانده میشود.

۱۰۶ کد اسکی حرف h  میباشد.


import cv2

def sufra():
 img = cv2.imread('test.png')
 cv2.imshow('image', img)
 key=cv2.waitKey(1000)
 cv2.destroyAllWindows()
 print (key)
 print ("waitkey")

if __name__ == '__main__':
 sufra()

۲۵۵
waitkey
>>> 

۱۰۴
waitKey
>>> 

 

در کد  از دستور if استفاده کردیم که فقط با  فشار دادن کلید q،پنجره بسته میشود. 

تابع ()ord یک رشته یا کاراکتر میگرد و کد اسکی آن را بر میگرداند.


import cv2

def sufra():
 img = cv2.imread('test.png')

while True:
 cv2.imshow('image', img)
 if cv2.waitKey(1)  == ord('q'):
 cv2.destroyAllWindows()
 print ("q")
 break;

if __name__ == '__main__':
 sufra()

waitKey
>>> 

 

() cv2.destroyAllWindows

به راحتی تمامی پنجره هایی که ایجاد کردیم  را از بین می برد. اگر می خواهید پنجره خاصی را از بین ببرید، از تابع ()cv2.destroyWindow  استفاده کنید.

cv2.destroyAllWindows() → None

نکته 

یک مورد خاص وجود دارد که شما قبلا می توانید یک پنجره ایجاد کنید و تصویر را بعدا بارگذاری کنید. در این صورت، می توانید مشخص کنید که آیا پنجره قابل اندازه بندی مجدد است یا نه.
  این کار توسط تابع () cv2.namedWindow  انجام می شود. به طور پیش فرض، پرچم cv2.WINDOW_AUTOSIZE است.اما اگر شما پرچم را به عنوان cv2.WINDOW_NORMAL مشخص کنید،می توانید پنجره را تغییر دهید. هنگامی که تصویر در ابعاد بزرگ، مفید خواهد بود: 

cv2.namedWindow(winname[, flags]) → None

پارامترها

name : نامی برای پنجره که ممکنه به عنوان شناسه هم استفاه شود

flags : پرچم های پنجره:

WINDOW_NORMAL اگر تنظیم شده باشد، کاربر می تواند پنجره را تغییر دهد (بدون محدودیت).
WINDOW_AUTOSIZE اگر تنظیم شده باشد، اندازه پنجره به صورت خودکار براساس تصویر نمایش داده می شود ، و شما نمی توانید اندازه پنجره را به صورت دستی تغییر دهید.
WINDOW_OPENGL اگر تنظیم شده باشد، پنجره با پشتیبانی OpenGL ایجاد خواهد شد.

 import cv2
img = cv2.imread('test.png')
cv2.namedWindow('image', cv2.WINDOW_NORMAL)
cv2.imshow('image',img)
cv2.waitKey(0)
k=cv2.destroyAllWindows()
print(k)
None
>>> 
 

 

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

مهارت ها:html,css,C#,ADO.NET,sqlserver,access,python

نوشته های مرتبط

نظری بگذارید

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