شرح كيفية استخدام مكتبة OpenCV في python بكل تفاصيلها
نبذة عن مكتبة OpenCV
واحد من اشهر المكتبات في البايثون وهي OpenCV وغالبا ما نستخدم الامر cv2 بداخلها هذة ان هذة المكتبة لا غنى عنها في مشاريع الmachine learning التي تحتاج منا التعامل مع الصور والكاميرات فهذة المكتبة توفر علينا كتابة اكواد كثيرة جدا , تتكون مكتبة OpenCV من مجموعة من الخوارزميات والشفرات البرمجية تم جمعها في مكان واحد وهي مكتبة يستخدمها اغلب مبرمجين البايثون الذين يتعاملون مع الصور سواء من الكاميرا او من الجهاز
ما الهدف من مكتبة OpenCV
كما نعلم ان البايثون لغة بسيطة ودائما يوجد تطوير قوي فيها من قبل المستخدمين والكثير يقوم بعمل مكتبات تسهل على الاخرين الامر في تطوير خوارزميات خاصة بهم ومن ضمن هذة المكتبات هي OpenCV وكان الهدف الرئيسي من المكتبة التعامل مع الروؤية الحاسوبية او ما يسمى بي computer vision وتستخدم بشكل كبير في الذكاء الاصنطاعي لتدريب نموذج معين على مجموعة من المدخلات ويتنوع استخدام هذة المكتبة بشكل كبير وخصوصا في المجالات الرقمية والصناعية وتعليم الالة .
كيف تقوم بتنصيب مكتبة OpenCV على بايثون ؟
لتنصيب اي مكتبة سواء OpenCV ( معالجة الصور بالبايثون ) او اي مكتبة اخرى تقوم بكتابة الاوامر التالية في محرر الاوامر Command window او ما يعرف باسم cmd وتقوم بكتابة الكود التالي وسوف يقوم بتنزيل المكتبة " opencv-contrib-python " اي مكتبة اخرى تستطيع تنزيلها من خلال الامر التالي فقط استبدل الامر opencv-contrib-python باسم المكتبة التي تريدها .
python -m pip install opencv-contrib-python --user
علاقة مكتبة OpenCV بلغة python ؟
كما يعرف ان مكتبة OpenCV تم تطويرها وانشاؤها باستخدام لغة c++ والاصدار الاول منها كان مكتوب بلغة c وهي تعد من اصعب لغات البرمجة المتعارف عليها من قبل المطورين ولكن الاصدارات الحديثة مثل cv2 والذي سوف نشرحه لكم اليوم وسنحاول تغطية كل شيئ حوله اصبح يدعم بايثون وهذا امر رائع جدا للمطورين لان المكتبة بها خوارزميات كثيرة جدا يصعب على المطورين العاديين التعامل معها ولكن لا تقلق سيتم شرح كل شيئ حول هذة المكتبة في هذة المقالة والمقالات القادمة وذلك لاهميتها الكبيره في البايثون .
كيفية عرض الصور داخل لغة python
بعد تثبيت المكتبة قم بعمل import لها وبعدها قم بعمل الامر الذي يستدعي الصورة من الجهاز وهو imread وضع بداخلة مسار الصورة مع الصيغة الخاصه بها , اذا كانت الصورة في نفس الملف الذي يوجد به المشروع فلا بأس بان تضع اسم الصورة والامتداد الخاص بها فقط , اولا دعونا نتاكد هل كانت الصورة موجوده ام لا لذلك سوف نقوم بعمل الامر if واذا لم تكن موجوده سوف يطبع رسالة لنا تخبرنا بتحديد الصورة الصحيحة واذا كانت موجوده سوف ينقلنا الى طباعة ان الصورة تم رفعها وبعدها نستخدم الامر imshow لكي نعرض الصورة وهذا الامر ياخد مننا قيمتين الاولى وهي الاسم الذي يظهر في الwindow والاخر وهو الصورة التي نريد عرضها , وفي النهاية نستخدم الامر waitkey ونضع به القيمة التي نريد عرض بها الصور اذا وضعت بداخلة القيمة 5000 سيغلق الصورة بعد 5 ثواني واذا وضعت 10000 سوف يغلق بعد 10 ثواني , ولكن اذا وضعت القيمة 0 سوف يضل يعرض الصورة الى ان تقوم بالنقر على اي زر على لوحة المفتاتيح ومن ثم يغلق لك الصورة المعروضة .
import cv2
image = cv2.imread(r"street.jpg")
if not (image is None) :
print("Image is loaded")
cv2.imshow("Screen image",image)
cv2.waitKey(5000)
else :
print("Error , please select image valid")
لعرض الصورة بشكل دائم وتختفي عند النقر على اي زر من لوحة المفاتيح يمكنك استخدام الكود التالي :
import cv2
image = cv2.imread(r"street.jpg")
if not (image is None) :
print("Image is loaded")
cv2.imshow("Screen image",image)
cv2.waitKey(0)
else :
print("Error , please select image valid")
كيفية تغيير الوان الصورة باستخدام مكتبة OpenCV
يمكنك ادراجة صورة كما تعرفنا ومن ثم تقوم بتعديل الالوان الخاصة بها عند العرض وذلك عن طريق عمل [ :, :, :] ووضع قيمة بانسبة لاول اثنين من العملامه : تكون هي عباره عن طول وعرض الصورة وما يهمنا هنا هو ثالث خانة وهي التلاعب بالالوان في هذة الحالة وضعت لكم القيمة 0 و 1 و2 و : وكل قيمة منهم لها تعبر عن لون معين ستلاحظ ان الصور جميعها باللون الاسود والابيض ولكن لو معنت النظر ستجد ان هناك الوان اغمق من الوان اخرى في مختلف الصورة حيث ان الصورة 0 نجد ان الالوان الفاتحة جدا اصبحت داكنه للغاية وهكذا مع باقي الصورة .
import cv2
image = cv2.imread(r"street.jpg")
if not (image is None) :
print("Image is loaded")
cv2.imshow("Screen image 0",image [:, :, 0] )
cv2.imshow("Screen image 1",image [ :, :, 1 ] )
cv2.imshow("Screen image 2",image [ :, :, 2 ] )
cv2.imshow("Screen image :",image [ :, :, : ] )
cv2.waitKey(0)
else :
print("Error , please select image valid")
كيفية عرض ابعاد الصورة بالبايثون
عملية طباعة Dimation من اهم العمليات التي يجب معرفتها قبل ان تقوم باخذ قرار لتقليل ابعاد الصورة , وفي هذا الامر قمت بطباعة ابعاد الصورة عن طريق الامر shap لل4 صور السابقة لو نلاحظ ان في الصورة الاصليه ( الخام ) ظهور القيمة 3 بجانب ابعادها وهذا الرقم يدل ان هذا الاصل من الصورة حيث لم نقوم باي تعديلات لا في الصورة الاولى ولا حتى في الاخيرة وذلك سبب ظهور الرقم 3 اخر الابعاد .
import cv2
image = cv2.imread(r"street.jpg")
if not (image is None) :
# print("Image is loaded")
# cv2.imshow("Screen image 0",image [:, :, 0] )
# cv2.imshow("Screen image 1",image [ :, :, 1 ] )
# cv2.imshow("Screen image 2",image [ :, :, 2 ] )
# cv2.imshow("Screen image :",image [ :, :, : ] )
t1 = image.shape
print("normal image :\n",t1)
t2 = image[ :, :, 1].shape
print("editing image 1: \n",t2 )
t3 = image[ :, :, 2].shape
print("editing image 2: \n",t3 )
t3 = image[ :, :, :].shape
print("editing image 3: \n",t3 )
cv2.waitKey(0)
else :
print("Error , please select image valid")
عرض اجزاء معينة من الصورة بواسطة مكتبة OpenCV
استكمالات على الاكواد السابقة سوف نقوم بعمل متغير باسم dmc وبعدها تقوم بكتابة اسم المتغير الذي يحمل الصورة الخاصة بك وبعدها تقوم بعمل [] وفي اول خانتين نضع القيم التي نريدها من الصورة نقطة البداية والنهاية لكل اتجاه للطول وايضا البداية والنهاية للعرض وبالنسبة لاخر قيمة اتركها او لا تقم بكتابها لانها كما تعلمنا انه مسؤوله عن تغيير الوان الصورة الى الابيض والاسود كما شرحناها لكم بالكود الذي بالاعلى .
import cv2
image = cv2.imread(r"street.jpg" , cv2.IMREAD_UNCHANGED)
if not (image is None) :
print("Image is loaded")
rows , cols ,channels = image.shape
dmc = image[345:168, 657:393]
cv2.imshow('dmc', dmc)
كيفية تحديد اجزاء من الصورة وقطعها باستخدام البايثون
استكمالا للاكواد السابقى سوف نستخدم الامر selectROI والمسؤول عن عملية التحديد ولكن قبل ان نقوم بها نضع المتغيرات الخاصة بنا وهي x , y ,h ,w او اي متغيرات اخرى وهي بكل بساطة نقطة x,y والطول والعرض بعد ذلك نقوم بعمل متغير باسم roi ونضع به النقاط التي حصلنا عليه من التحديد الذي قمنا به في الصورة السابقة وبعدها اذا اردت مشاهدة القيم الجديد يمكنك عمل print لها وبعدها نقوم بعرض الصورة الجديدة عن طريق استدعاء المتغير roi داخل الامر imshow لكي تظهر معنا الصورة , سوف تلاحظ انه يوجد # جمب كل سطر حيث شرحت لكم كل سطر مسؤول عن ماذا , وهذا كان اخر كود في مقالة اليوم .
import cv2
image = cv2.imread(r"street.jpg") # upload image
if not (image is None) :
print("Image is loaded")
rows , cols ,channels = image.shape # Resolution Image
x , y , w , h = cv2.selectROI(image) # Selecting part from image
roi= image[y:y+h , x:x+w, :] # result select ( height + weight )
print(roi) # print result
cv2.imshow("show image", image) # show full image in window
cv2.imshow("show image",roi) # show part selected in window after press enter
cv2.waitKey(0) # close window after press any key on keyboard
else :
print("Error , please select image valid")
في المقالات القادمة سوف نتعمق معكم في شرح مكتبة cv2 بشكل اكبر وتقديم اكثر من مثال عليها وذلك لاهميتها , ونتمنى ان تنال هذة المقالة على رضاكم واستفدتم منها واتمنى ان نلقاكم في المقالات القادمة ويمكنك مشاهدة احد المقالات السابقة في البايثون :