Lesson_1_Dealing_with_Images.ipynb

  |   Source

الدرس الاول : التعامل مع الصور

قراءة صورة :

باستخدام التابع cv2.imread ولكن يجب اعطاء المسار الكامل للصورة او وضعها بمجلد العمل ويكتب الاسم مع اللاحقة ك str كمتغير أول

المتغير الثاني وهو مؤشر flag يحدد كيفية قراءة الصورة , ويأخذ ثلاث قيم :

  • cv2.IMREAD_COLOR

  • cv2.IMREAD_GRAYSCALE

  • cv2.IMREAD_UNCHANGED

وتأثيرهم بالترتيب:

  • اقرأ الصورة بالالوان الكاملة (بدون شفافية )
  • اقرأ الصورة بالرمادي (مستوي واحد)
  • اقرأ الصور بالالوان الكاملة (مع الشفافية)

ويمكن تمرير 1 ,0.-1 كبديل عن الاعلام حرفياً بالترتيب. كما المثال التالي :

In [4]:
import numpy as np
import cv2
# load color image in gray scale
pic = cv2.imread('..\..\..\..\lightbox.png',0)

عرض الصورة:

باستخدام التابع : cv2.imshow نظهر الصورة بالنافذة , واتوماتيكياً تتلائم الصورة مع النافذة , واول متغير هو اسم النافذة , والمتغير الثاني هو الصورة , ويمكنك انشاء اي عدد من النوافذ ولكن كل منها له اسم فريد ,

In [5]:
import matplotlib.pyplot as plt
%matplotlib inline
plt.imshow(pic)
plt.show()
  • المكتبة السابقة هي للاظهار ضمن الصفحة للصور , وهي matplotlib ولكن لماذا الصورة غريبة الألوان , الجواب: لأن الأمر يعود للمجال اللوني colormap , ولذلك ندخله كالتالي
In [7]:
plt.imshow(pic,'gray')
plt.show()

cv2.waitKey() وهو تابع ينتظر لمدة تساوي متغيره الاول بواحدة ميلي ثانية , حتى يتابع التنفيذ ,او تاتيه ضغطة زر , يردها بمتغير الخرج له , (بصيغة ascii ) واذا مرننا له صفراً او عدداً سالباً فسوف يتوقف ينتظر ابداً لاي ضغطة زر ..

cv2.destroyAllWindows() ببساطة اغلق كل النوافذ الموجودة , اما التابع cv2.destroyWindow() فيجب تمرير اسم نافذة محدد لها.

ملاحظة:

اذا اردنا تحجيم اظهار الصورة , لمايناسب الشاشة فعلينا استخدام التابع cv2.namedWindow نمرر له اسم النافذة المرغوب مع علم له خيارين:cv2.WINDOW_NORMAL او cv2.WINDOW_AUTOSIZE لتغيير الحجم للمناسب .

In [ ]:
cv2.namedWindow('image',cv2.WINODOW_NORMAL)
cv2.imshow('image',pic)
cv2.waitKey(0)
cv2.destroyAllWindows()

كتابة صورة :

استخدم التابع cv2.imwrite لحفظ الصورة . اول متغير لها هو اسم الملف , والثاني هو رمز الصورة ( متغيرها)

In [ ]:
cv2.imwrite('picgray.png',pic)

الملخص:

البرنامج التالي يحمل الصورة ويظهرها ويحفظها بالمستوى الرمادي اذا ضغطت 's' او لا يحفظها ويغلق بضغط ESC.

In [ ]:
import numpy as np
import cv2
img = cv2.imread('pic5.jpg',0)
cv2.imshow('image',img)
k = cv2.waitKey(0)

if k == 27: # wait for ESC key to exit
    cv2.destroyAllWindows()
elif k == ord('s'): # wait for 's' key to save and exit
    cv2.imwrite('messigray.png',img)
cv2.destroyAllWindows()

باستخدام Matplotlib:

تتيح هذه المكتبة امكانيات افضل لاظهار الصور وحفظها كما يلي:

In [9]:
plt.imshow(pic, cmap = 'gray', interpolation = 'bicubic')
plt.xticks([]), plt.yticks([]) # to hide tick values on X and Y axis
plt.show()

هناك العديد من الخيارات المتوفرة في Matplotlib ويمكن العودة للمراجع الخاصة بها , للحصول على تعليمات اكثر ,

ملاحظة : عند تحميل الصور عبر opencv نحصل على صور بصيغة BGR ولكن عند اظهارها ب Matplotlib يتم اعتبارها RGB (اي يكون الاحمر ازرق والعكس) لذلك يجب مراعاة هذا الوضع والانتباه لتبدبل الالوان قبل اظهرها عبر ال Matplotlib ...

Comments powered by Disqus