مكتبة OpenCV (الجزء الأول) : مقدمة عن استخدام OpenCV

1٬598

أهلاً بسلسلة الدروس التي تغطي مكتبة ال OpenCV والتي تعتبر مكتبة لمعالجة الصور والفيديوهات والتي تدعم لغات مثل C++، C، Python، و Java. مكتبة ال OpenCV تُتسخدم لكل أنواع معالجة الصور والفيديوهات والتي تشمل التعرف علي الوجوه وإكتشافها، قراءة لوحات المرور، التعديل علي الصور، التعرف علي الحروف الضوئية، وغير ذلك.

سنعمل من خلال العديد من الأمثلة بلغة البايثون. البداية في مكتبة ال OpenCV سهلة بكثير. فقط تحتاج إلي مكتبتين رئيسيتين وهما python-OpenCV وال NumPy بالإضافة غلي مكتبة أخري إختيارية وهي Matplotlib.

 

مستخدمي Windows

أسهل طريقة لربط البايثون ب OpenCV في نظام Windows هو تحميل ملف wheel وتسطيبة من خلال أداة ال pip. بالنسبة لل NumPy و ال Matplotlib، يمكن تسطيبهم بشكل مباشر من خلال تحميلهم من الإنترنت بإستخدام نفس الآداة:

pip install numpy

pip install matplotlib

مستخدمي Linux أو Mac

يمكن إستخدام تلك الأوامر في تسطيب تلك المكتبات:

pip3 install numpy or apt-get install python3-numpy.

pip3 install matplotlib or apt-get install python3-matplotlib.

apt-get install python3-OpenCV

ال Matplotlib تعتبر مكتبة إختيارية والهدف منها هو عرض الصور والفيديوهات. تُستخدم ال NumPy في كل شيء متعلق بالأرقام في البايثون.

بعض العمليات المتعلقة بال OpenCV تتطلب تنزيلها بشكل كامل (تقريباً 3 جيجا) ولكن يُمكننا البداية فقط ببعض الأمور البسيطة. سنتطرق إلي تنزيل المكتبة بشكل كامل لاحقاً.

تأكد من أن المكتبات تعمل بشكل صحيح من خلال تشغيل هذه الأوامر الثلاثة:

import cv2

import matplotlib

import numpy

إذا لم يكن هناك أخطاء، فأنت مستعد للبداية.

في البداية، يجب علينا فهم بعض الأمور المتعلقة بمعالجة الصور والفيديوهات. الفيديوهات تتكون من مجموعة frames والتي تظهر واحدة تلو الأخري بمعدل يتراوح بين 30 إلي 60 في الثانية الواحدة ويمكن أن يزيد أو يقل عن ذلك. ال Frames تعتبر صور ثابتة بحد ذاتها. بعض الأمور التي تتعلق بمعالجة الفيديو تتطلب معالجة أكثر من صورة حتي نصل إلي ناتج. علي سبيل المثال، معرفة إتجاه الحرطة يتطلب إستخدام أكثر من صورة أو Frame. لكن بعض الأمور مثل التعرف علي الأشياء object recognition لا يتطلب إستخدام أكثر من صورة.

بعد ذلك، العديد من طرق معالجة الصور والفيديوهات كوت هدفها تبسيط الأمور قدر الإمكان. غالباً ما تبدأ بتحويل الصور الألوان إلي صورة رمادية. بعد ذلك يمكننا القيام بالعديد من طرق معالجة الصور والفيديوهات. غالباً الأمور يبدأ ببعض التحويلات علي الصور الأأصلية، بعد ذلك معالجة لتلك الصور، وأخيراً تطبيق ما نود علي الصور الأصلية في النهاية. نادراً ما يتم معالجة الصور الأصلية.

 

إزالة خلفية الصورة Background Subtraction

تصفية الألوان Color Filtering

 

إكتشاف الحواف Edge Detection

مقارنة السمات للتعرف علي الأشياء

طريقة عامة للتعرف علي الأشياء

في حالة إكتشاف الحواف Edge detection، ال pixel السوداء تكون قيمتها (0,0,0) أما البيضاء تعتبر قيمتها (255,255,255). كل صورة من الفيديو يتم تقسيمها إلي pixels ويكمننا إتنتاج الحواف منها. بعد ذلك إذا أردت رؤية الصور الأصلية وبها تلك الحواف يمكننا تظليل كل ال pixels في الصورة الأصلية والتي تناظر ال pixels البيضاء داخل صورة الحواف.

بنهاية هذا الدرس، سنكون قادرين علي فعل كل ذلك ونستطيع تدريب الآلة للتعرف علي الأشياء التي نريدها. الخطوة الأولي هي تحويل الصورة من صورة ملونة إلي صورة رماديةgrayscale . قبل ذلك يجب تحميل الصورة. لنبدأ بتحميل صورة الساعة التالية:

import cv2

import numpy as np

from matplotlib import pyplot as plt 

img = cv2.imread(‘watch.jpg’,cv2.IMREAD_GRAYSCALE)

cv2.imshow(‘image’,img)

cv2.waitKey(0)

cv2.destroyAllWindows()

في البداية، نقوم بإستدعاء بعض المكتبات التي قمنا بتسطيبها من قبل. بعد ذلك نقوم بتعريف متغير img ويأخذ قيمته من cv2.read(image file, params). بشكل غفتراضي يتم قراءة الصورة علي أنها صورة ملونة بغير alpha channel. إذا تريد الإحتفاظ ب alpha channel، يجب غستخدام IMAGE_UNCHANGED.

بدلاً من IMAGE_COLOR وغيرها، يمكننا إستخدام أرقام. بالنسبة لل parameter الثاني، يمكنك إستخدام -1، 0، 1. 1 للألوان، 0 للرمادي، -1 بدون تغيير. فلقراءة صورة ردامية، يمكننا إستخدام:

img = cv2.imread(‘watch.jpg’, 0)

بمجرد تحميل الصورة، يكننا إستخدام cv2.imshow(title, image) حتي نعرض الصورة. من هنا، يمكننا إستخدام cv2.waitkey(0) حتي ننظر للضغط علي زر. بمجرد حصول ذلك، سنستخدم ال cv2.estroyAllWindows() لغلق كل شيئ.

يمكننا أيضاً عرض الصور بإستخدام مكتبة Matplotlib:

import cv2

import numpy as np

from matplotlib import pyplot as plt 

img = cv2.imread(‘watch.jpg’,cv2.IMREAD_GRAYSCALE) 

plt.imshow(img, cmap = ‘gray’, interpolation = ‘bicubic’)

plt.xticks([]), plt.yticks([])  # to hide tick values on X and Y axis

plt.plot([200,300,400],[100,200,300],’c’, linewidth=5)

plt.show()

لاحظ أنه يمكن رسم خطوط علي الصورة بأي مكان نرنيده من خلال تحديد أماكن ال pixels. لكن ال OpenCV تُدعم العديد من ال methods للقيام بذلك. بعد عمل تغييرات علي الصورة، يمكننا حفظها كالتالي:

cv2.imwrite(‘watchgray.png’,img)

البداية مع الصور بإستخدام ال OpenCV تعتبر بسيطة للغاية. في الدرس اقادم سنتعرف علي كيفية تحميل الصور من فيديو أو من كاميرا.

 

الدرس الأصلي بواسطة Harrison Kinsley:

https://pythonprogramming.net/loading-images-python-opencv-tutorial/

تعليقات