- ما هي الصور؟
- كيف يخزن الكمبيوتر الصور
- لماذا يصعب على الآلة تحديد الصور
- تطبيق واستخدامات OpenCV
- تثبيت OpenCV مع Python و Anaconda
- فتح الصور وحفظها في OpenCV
- صورة تحجيم رمادية في OpenCV
- مسافات اللون
- استكشاف المكونات الفردية لصورة RGB
- تحويل الصورة إلى مكون RGB فردي
- تمثيل الرسم البياني للصورة
- رسم الصور والأشكال باستخدام OpenCV
الفن طريقة للرؤية ، ويقولون إن الرؤية تصديق ، لكن العكس هو الصحيح أيضًا ، الإيمان هو الرؤية ومن الصعب حقًا تخيل العيش في هذا العالم بدون موهبة الرؤية - أعيننا ، كم هو رائع أن تكون طفلاً عندما تفتح أعيننا فقط نرى العالم ونبدأ في التعرف على العالم من حولنا ورؤيته ولكن مع مرور الوقت ، تصبح نفس التجربة الرائعة تجربة عادية. ولكن مع تقدم التكنولوجيا ، فنحن على وشك أن تتمكن الآلات أيضًا من رؤيتها وفهمها. في الوقت الحالي ، لا يبدو أنه خيال علمي إذا قمت بإلغاء قفل هاتفك فقط بوجهك ، ولكن قصة تطور رؤية الجهاز تعود إلى أكثر من 20 عامًا.
تم اتخاذ الخطوة الرسمية الأولية في هذا المجال في عام 1999 في مبادرة إنتل ، عندما تم التعاون في جميع الأبحاث الجارية بموجب السيرة الذاتية المفتوحة (رؤية الكمبيوتر مفتوحة المصدر) ، والتي تمت كتابتها في الأصل بلغة C ++ ، مع أول إصدار رئيسي لها 1.0 في عام 2006 ثانيًا في عام 2009 ، والثالث في عام 2015 والرابع الآن في 2018. الآن OpenCV لديه واجهات C ++ و Python و Java ويدعم Windows و Linux و Mac OS و iOS و Android. لذلك يمكن تثبيته بسهولة في Raspberry Pi مع بيئة Python و Linux. ويمكن استخدام Raspberry Pi مع OpenCV والكاميرا المرفقة لإنشاء العديد من تطبيقات معالجة الصور في الوقت الفعلي مثل اكتشاف الوجه وقفل الوجه وتتبع الكائن واكتشاف لوحة أرقام السيارة ونظام أمن المنزل وما إلى ذلك.
قبل الدخول في تعلم معالجة الصور باستخدام OpenCV ، من المهم معرفة ماهية الصور وكيف يرى البشر والآلات تلك الصور.
ما هي الصور؟
الصور هي تمثيل ثنائي الأبعاد لطيف الضوء المرئي. وطيف الضوء المرئي هو مجرد جزء من الطيف الكهرومغناطيسي الموجود هناك بين طيف الأشعة تحت الحمراء والأشعة فوق البنفسجية.
كيف تتشكل الصور: - عندما ينعكس الضوء عن جسم على فيلم أو جهاز استشعار أو على شبكية العين.
هذه هي الطريقة التي تعمل بها أعيننا ، باستخدام حاجز لمنع معظم نقاط الأضواء التي تترك فتحة صغيرة يمكن للضوء أن يمر من خلالها تسمى الفتحة ، وتشكل صورة مركزة بشكل كبير وهي نموذج عملي لكاميرا ذات فتحة صغيرة ، ولكن هناك مشكلة في الكاميرا ذات الفتحة الدقيقة ، حيث ستدخل نفس القدر من الضوء إلى الفتحة ، والتي لا يمكن أن تكون مناسبة للفيلم أو الصورة التي تم تشكيلها كما لا يمكننا الحصول على صورة مركزة ، وذلك لتركيز الصورة علينا تحتاج إلى تحريك الفيلم ذهابًا وإيابًا ، لكن هذا يمثل مشكلة في العديد من المواقف.
أو يمكننا حل هذه المشكلة باستخدام العدسات ، فهي تتيح لنا التحكم في حجم الفتحة ، وفي التصوير الفوتوغرافي المعروف باسم f Stop ، بشكل عام خفض قيمة f Stop هو الأفضل في التصوير الفوتوغرافي.
يتيح لنا حجم الفتحة أيضًا الدخول في عمق مجال لطيف يسمى Bokeh في التصوير الفوتوغرافي ، فهو يتيح لنا الحصول على خلفية غير واضحة أثناء التركيز على الصورة.
كيف يخزن الكمبيوتر الصور
ربما تكون قد سمعت عن تنسيقات صور مختلفة مثل.png و.jpgG وما إلى ذلك ، كل هذا يمثل تمثيلًا رقميًا لعالمنا التناظري ، وتقوم أجهزة الكمبيوتر بذلك عن طريق ترجمة الصورة إلى رمز رقمي للتخزين ثم إعادة ترجمة الملف إلى صورة من أجل عرض. لكن في الأساسيات يستخدمون نظامًا أساسيًا مشتركًا لتخزين الصور ، وينطبق الشيء نفسه على OpenCV.
يستخدم OpenCV مساحة ألوان RGB (أحمر وأخضر وأزرق) افتراضيًا لصوره ، حيث يحتوي كل إحداثيات بكسل (س ، ص) على 3 قيم تتراوح من حيث الكثافة في شكل 8 بت أي (0-255 ، 2 8).
يمنحنا مزج شدة مختلفة لكل لون طيفًا كاملاً ، ولهذا السبب في الرسم أو الفن تعتبر هذه الألوان الثلاثة ألوانًا أساسية وكل الألوان الأخرى ثانوية ، لأن معظم الألوان الثانوية يمكن تشكيلها بواسطة الألوان الأساسية. مثل اللون الأصفر ، لدينا القيم التالية: الأحمر - 255 ؛ أخضر - 255 ؛ أزرق - 0.
الآن يتم تخزين الصور في مصفوفات متعددة الأبعاد. في البرمجة ، المصفوفة عبارة عن سلسلة من مجموعة الكائنات. وهنا نتعامل مع ثلاثة أنواع من المصفوفات 1D و 2 D و 3 D حيث يرمز الحرف D إلى الأبعاد.
يتم تخزين الصور الملونة في مصفوفات ثلاثية الأبعاد ، حيث تمثل الأبعاد الثالثة ألوان RGB (التي سنراها لاحقًا) ، وتشكل معًا كثافة مختلفة من وحدات البكسل للصورة ، بينما يتم تخزين الصور بالأبيض والأسود في مصفوفات ثنائية الأبعاد وهناك نوعان من الصور بالأبيض والأسود. الصور ذات التدرج الرمادي والثنائية.
تتشكل الصور ذات التدرج الرمادي من ظلال الرمادي لمصفوفة ثنائية الأبعاد ، بينما تكون الصور الثنائية من وحدات البكسل إما باللون الأسود أو الأبيض.
لماذا يصعب على الآلة تحديد الصور
تعتبر رؤية الكمبيوتر مهمة صعبة في حد ذاتها ، يمكنك أن تتخيل بنفسك مدى صعوبة إعطاء الآلة إحساسًا بالرؤية والاعتراف والتعرف. هناك العوامل التالية التي تجعل رؤية الكمبيوتر صعبة للغاية.
- مستشعر الكاميرا وقيود العدسة
- عرض الاختلافات نقطة
- تغيير الإضاءة
- تحجيم
- انسداد
- اختلافات فئة الكائن
- صور غامضة / أوهام بصرية
تطبيق واستخدامات OpenCV
على الرغم من الصعوبة ، فإن لدى Computer Vision العديد من قصص النجاح
- الملاحة الروبوتية - سيارات القيادة الذاتية
- كشف الوجه والتعرف عليه
- بحث محرك البحث عن الصور
- قراءة لوحة الترخيص
- التعرف على خط اليد
- سناب شات وفلاتر الوجه
- التعرف على الأشياء
- تتبع الكرة واللاعبين في الرياضة
- و أكثر من ذلك بكثير!
تثبيت OpenCV مع Python و Anaconda
OpenCV مكتوب بلغة C ++ ، ولكن من الصعب جدًا تنفيذه باستخدام C ++ ، ومن ثم نختار تطبيقه بلغة عالية المستوى مثل لغة python ، وهناك أيضًا فوائد إضافية لتطبيق OpenCV مع python حيث أن Python هي واحدة من أسهل اللغات بالنسبة للمبتدئين أيضًا ، فهو قوي للغاية لتطبيقات علوم البيانات والتعلم الآلي ، كما أنه يخزن الصور في مصفوفات معقدة مما يتيح لنا القيام ببعض العمليات القوية للغاية بسهولة تامة.
تعد البرمجة الأساسية مفيدة مع Exposure to High School Level Math أو كاميرا ويب أو Python 2.7 أو 3.6 (يُفضل حزمة Anaconda).
الخطوة 1. قم بتنزيل وتثبيت حزمة Anaconda Python
انتقل إلى: https://www.anaconda.com/download واختر وفقًا لجهازك الطقس في النوافذ أو Linux أو mac ويمكنك اختيار إصدار python 2.7 أو python 3.7 لأنظمة 64 بت أو أنظمة 32 بت ، ولكن الآن أيام معظم النظام 64 بت.
يأتي توزيع Anaconda للثعبان جنبًا إلى جنب مع Spyder studio ودفاتر jupyter و anaconda موجه ، مما يجعل استخدام python سهل الاستخدام للغاية. سنستخدم سبايدر ستوديو لعمل الأمثلة.
يعد الاختيار بين python 2.7 أو 3.7 محايدًا تمامًا ، ولكن بالنسبة للأمثلة ، سنستخدم python 3.7 نظرًا لأنه مستقبل Python وسيتولى Python 2.7 شكل 2020 ، كما يتم تطوير معظم المكتبات في Python 3.7 مع الاحتفاظ الجانب المستقبلي للبيثون في الاعتبار. كما أنه يعطي النتائج المتوقعة في العمليات الحسابية الأساسية مثل (2/5 = 2.5) ، في حين أن python 2.7 سيقيمها إلى 2. كما يتم التعامل مع الطباعة كدالة في python 3.7 (print ("hello")) ، لذلك فهي تقدم التدريب العملي للمبرمجين.
الخطوة الثانية. إنشاء منصة افتراضية باستخدام OpenCV
سنقوم بتثبيت OpenCV عن طريق إنشاء منصة افتراضية لـ spyder باستخدام موجه Anaconda وملف YML الذي تم تحميله هنا.
باستخدام ملفات YML ، سنقوم بتثبيت جميع الحزم والمكتبات التي قد نحتاجها ، ولكن إذا كنت ترغب في تثبيت أي حزم إضافية ، فيمكنك تثبيتها بسهولة من خلال موجه anaconda ، عن طريق تشغيل أمر تلك الحزمة.
انتقل إلى أيقونة بحث windows وابحث عن محطة موجه الأوامر anaconda ، يمكنك العثور عليها داخل مجلد anaconda الذي قمت بتثبيته للتو
ثم يتعين عليك العثور على ملف YML الذي تم تنزيله ، ومن هنا لديك خياران إما تغيير دليل الجهاز الطرفي إلى الموقع الذي تم تنزيل ملف YML الخاص بك فيه أو نسخ ملف YML إلى الدليل حيث تم تثبيت anaconda في معظمه الحالات سيكون داخل C: \ drive ، بعد نسخ ملف YML الخاص بك إلى الموقع المحدد ، قم بتشغيل الأمر التالي في موجهك
conda env قم بإنشاء –f virtual_platform_windows.yml
نظرًا لأن نظامي يعمل على windows ، فإن ملف YML والأمر يتوافق مع النوافذ ، ومع ذلك يمكنك التعديل وفقًا لنظامك عن طريق استبدال windows بـ linux أو mac حسب كل منهما.
ملاحظة: - إذا أعطى استخراج الحزمة خطأ ، فقم بتثبيت pytorch و numpy أولاً ثم قم بتشغيل الأمر أعلاه.
الآن ابحث عن متصفح أناكوندا وستكون هناك قائمة منسدلة من "التطبيقات على ___" ومن هناك حدد بيئة افتراضية ومن ثم عليك تشغيل سبايدر ستوديو.
وهذا كل شيء ، أنت جاهز للبدء!
فتح الصور وحفظها في OpenCV
نوضح هنا بعض الأوامر والمصطلحات الأساسية لاستخدام Python في OpenCV. سنتعرف على ثلاث وظائف أساسية في OpenCV imread و imshow و imwrite.
# التعليقات في بيثون معطاة بالرمز #
استيراد opencv في بيثون عن طريق الأمر
استيراد السيرة الذاتية 2
قم بتحميل صورة باستخدام "imread" مع تحديد مسار الصورة
image = cv2.imread ('input.jpg')
الآن يتم تحميل هذه الصورة وتخزينها في بيثون كمتغير أطلقناه على الصورة
الآن لعرض متغير الصورة الخاص بنا ، نستخدم "imshow" والمعامل الأول لوظيفة imshow هو العنوان الموضح في نافذة الصورة ، ويجب إدخاله في ('') لتمثيل الاسم كسلسلة
cv2.imshow ("مرحبًا بالعالم" ، صورة)
يسمح لنا waitkey بإدخال المعلومات عندما تكون نافذة الصورة مفتوحة ، من خلال تركها فارغة تنتظر فقط الضغط على أي مفتاح قبل المتابعة ، من خلال وضع الأرقام (باستثناء 0) ، يمكننا تحديد تأخير إلى متى تبقي النافذة مفتوحة (الوقت بالمللي ثانية هنا).
cv2.waitKey ()
تغلق ميزة "تدمير جميع النوافذ " جميع النوافذ المفتوحة ، وسيؤدي الفشل في وضع هذا إلى توقف برنامجك.
cv2.destroyAllWindows ()
، لهذا سوف نستخدم numpy ، numpy هي مكتبة لبرمجة بايثون لإضافة دعم إلى مصفوفات ومصفوفات كبيرة متعددة الأبعاد.
import cv2 #importing numpy import numpy as np image = cv2.imread ('input.jpg') cv2.imshow ('hello_world'، image) # الدالة shape مفيدة جدًا عندما ننظر إلى أبعاد مصفوفة ، فهي يقوم بإرجاع مجموعة تعطي بعدًا لطباعة الصورة (image.shape) cv2.waitKey () cv2.destroyAllWindows ()
إخراج وحدة التحكم - (183 ، 275 ، 3) ، أبعاد الصورة هي 183 بكسل في الارتفاع و 275 بكسل في العرض و 3 تعني أن هناك ثلاثة مكونات أخرى (R ، G ، B) تجعل هذه الصورة (تظهر أن الصور الملونة مخزنة في مصفوفات ثلاثية الأبعاد).
print ('ارتفاع الصورة:'، (image.shape، 'pixels')) print ('Width of image:'، (image.shape، 'pixels'))
إخراج وحدة التحكم - ارتفاع الصورة: (183 ، "بكسل")
عرض الصورة: (275 بكسل)
حفظ الصورة المحررة في OpenCV
نستخدم "imwrite" لتحديد اسم الملف والصورة المراد حفظها.
cv2.imwrite ('output.jpg'، image) cv2.imwrite ('output.png'، صورة)
الوسيطة الأولى هي اسم الملف الذي نريد حفظه ، {لقراءة أو حفظ الملف الذي نستخدمه ('') للإشارة إليه كسلسلة} والوسيطة الثانية هي اسم الملف.
يتيح لك OpenCV حفظ الصورة بتنسيقات مختلفة.
صورة تحجيم رمادية في OpenCV
Greyscaling هي العملية التي يتم من خلالها تحويل الصورة من لون كامل إلى ظلال من الرمادي (أسود وأبيض)
في opencv ، تقوم العديد من الوظائف بتدرج الصور باللون الرمادي قبل المعالجة. يتم ذلك لأنه يبسط الصورة ، ويعمل تقريبًا كحد من الضوضاء ويزيد وقت المعالجة نظرًا لوجود معلومات أقل في الصورة (حيث يتم تخزين الصور ذات التدرج الرمادي في مصفوفات ثنائية الأبعاد).
import cv2 # تحميل صورة المدخلات الخاصة بنا = cv2.imread ('input.jpg') cv2.imshow ('original'، image) cv2.waitKey () # نحن نستخدم cvtcolor للتحويل إلى greyscale gray_image = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY) cv2.imshow ('grayscale'، gray_image) cv2.waitKey () cv2.destroyALLWindows ()
أبسط طريقة لتحويل الصورة إلى تدرج الرمادي هي مجرد إضافة الوسيطة 0 في وظيفة imread جانبًا إلى اسم الصورة
استيراد cv2 grey_image = cv2.imread ('input.jpg'، 0) cv2.imshow ('grayscale'، grey_image) cv2.waitKey () cv2.destroyAllWindows ()
استيراد cv2 استيراد numpy مثل np image = cv2.imread ('input.jpg') print (image.shape) cv2.imshow ('original'، image) cv2.waitKey () grey_image = cv2.cvtColor (image، cv2.COLOR_BGR2GRAY) cv2.imshow ('grayscale'، gray_image) print (gray_image.shape) cv2.waitKey () cv2.destroyALLWindows ()
خرج وحدة التحكم: - (183، 275، 3) - للصورة الملونة
(183 ، 275) - للصورة ذات التدرج الرمادي
ومن هنا يظهر بوضوح أن الصور الملونة يتم تمثيلها بواسطة مصفوفات ثلاثية الأبعاد ، بينما يتم تمثيل الصور ذات التدرج الرمادي بواسطة مصفوفات ثنائية الأبعاد.
مسافات اللون
فراغات اللون هي الطريقة التي يتم بها تخزين الصور. RGB ، HSV ، CMYK هي مساحات لونية مختلفة ، هذه مجرد طرق بسيطة لتمثيل اللون.
RGB - أحمر وأخضر وأزرق.
HSV - تدرج اللون والتشبع والقيمة.
و CMYK يستخدم عادة في الطابعات النافثة للحبر.
مساحة ألوان RGB أو BGR
مساحة اللون الافتراضية لـ OpenCV هي RGB. RGB هو نموذج ألوان مضاف يولد الألوان من خلال الجمع بين الألوان الزرقاء والخضراء والحمراء ذات الكثافة / السطوع المختلفة في OpenCV نستخدم أعماق ألوان 8 بت.
- أحمر (0-255)
- أزرق (0-255)
- أخضر (0-255)
ومع ذلك ، يقوم OpenCV بالفعل بتخزين الألوان بتنسيق BGR.
حقيقة ممتعة: - نحن نستخدم ترتيب BGR في أجهزة الكمبيوتر نظرًا لكيفية تخزين الأعداد الصحيحة 32 بت غير الموقعة في الذاكرة ، ولا يزال يتم تخزينها على هيئة RGB. العدد الصحيح الذي يمثل لونًا على سبيل المثال: - سيتم تخزين 0X00BBGGRR كـ 0XRRGGBB.
مساحة اللون HSVHSV (تدرج اللون والتشبع والقيمة / السطوع) هي مساحة لونية تحاول تمثيل الألوان التي يراها البشر. يقوم بتخزين معلومات اللون في تمثيل أسطواني لنقاط ألوان RGB.
تدرج اللون - قيمة اللون (0-179)
التشبع - حيوية اللون (0-255)
القيمة - السطوع أو الشدة (0-255)
تنسيق فضاء اللون HSV مفيد في تجزئة اللون. في RGB ، لا يكون ترشيح لون معين أمرًا سهلاً ، ولكن HSV يجعل من السهل جدًا تعيين نطاقات الألوان لتصفية لون معين كما نتصورها.
يمثل Hue اللون في HSV ، وتتراوح قيمة تدرج اللون من 0 إلى 180 وليس 360 ، لذا فهو لا يكمل الدائرة الكاملة وبالتالي يتم تعيينه بشكل مختلف عن المعيار.
مرشحات نطاق اللون
- أحمر - (165-15)
- أخضر - (45-75)
- أزرق - (90-120)
كما نعلم الصور التي يتم تخزينها في مساحة ألوان RGB (الأحمر والأخضر والأزرق) وهكذا يظهر لنا OpenCV نفس الشيء ، ولكن أول شيء يجب تذكره حول تنسيق RGB الخاص بـ opencv هو أنه في الواقع BGR ويمكننا معرفة ذلك من خلال النظر إلى شكل الصورة.
استيراد cv2 استيراد numpy كـ np image = cv2.imread ('input.jpg') # B ، G ، R قيمة لأول 0،0 بكسل B ، G ، R = طباعة صورة (B ، G ، R) طباعة (صورة.shape) # الآن إذا طبقنا هذا على صورة تدرج الرمادي grey_img = cv2.cvtColor (image ، cv2.COLOR_BGR2GRAY) print (gray_img.shape) #gray_image pixel value for 10،50 pixel print (gray_img)
إخراج وحدة التحكم: طباعة (B ، G ، R) - 6 11 10
طباعة (شكل صورة) - (183 ، 275 ، 3)
طباعة (grey_img.shape) - (183، 275)
طباعة (grey_img) - 69
يوجد الآن بعدين فقط في الصورة ذات المقياس الرمادي ، حيث نتذكر أن الصورة الملونة مخزنة في ثلاثة أبعاد ، والبعد الثالث هو (R ، G ، B) بينما في التدرج الرمادي يوجد بعدين فقط ، حيث (R ، G ، ب) غائب وبالنسبة لموضع بكسل معين ، نحصل فقط على قيمة واحدة بينما في الصورة الملونة نحصل على ثلاث قيم.
مساحة اللون الأخرى المفيدة هي HSV
import cv2 image = cv2.imread ('input.jpg') hsv_image = cv2.cvtColor (image، cv2.COLOR_BGR2HSV) cv2.imshow ('HSV image'، hsv_image) cv2.imshow ('Hue channel'، hsv_image) cv2. imshow ('قناة التشبع'، hsv_image) cv2.imshow ('قناة القيمة'، hsv_image) cv2.waitKey () cv2.destroyAllWindows ()
بعد تشغيل الكود ، يمكنك رؤية أربع صور منها ثلاث قنوات فردية وواحدة مدمجة صورة HSV.
صورة قناة Hue مظلمة تمامًا لأن قيمتها تختلف فقط من 0 إلى 180.
لاحظ أيضًا أن وظيفة imshow تحاول إظهار صورة RGB أو BGR ، لكن تحويل HSV يتداخل معها.
أيضًا ، ستكون قناة القيمة مماثلة للتدرج الرمادي للصورة بسبب سطوعها.
استكشاف المكونات الفردية لصورة RGB
import cv2 image = cv2.imread ('input.jpg') # تقوم وظيفة تقسيم opencv بتقسيم imageinti لكل فهرس لون B، G، R = cv2.split (صورة) cv2.imshow ("Red"، R) cv2.imshow ("أخضر" ، G) cv2.imshow ("أزرق" ، ب) # تكوين الصورة الأصلية بدمج مكونات اللون الفردية المدمجة = cv2.merge () cv2.imshow ("merged"، merged) #amplifying the blue color merged = cv2.merge () cv2.imshow ("مدمج مع تضخيم أزرق" ، مدمج) # تمثيل شكل مكونات اللون الفردية. # إخراج wuld ان اثنين فقط البعد whih لالشغب المحتملين الطول والعرض، منذ العنصر الثالث من عناصر RGB يتم تمثيل فردي الطباعة (B.shape) طباعة (R.شكل) طباعة (شكل G.) cv2.waitKey (0) cv2.destroyAllWindows ()
إخراج وحدة التحكم: # أبعاد الصورة من وظيفة الشكل
(183 ، 275)
(183 ، 275)
(183 ، 275)
تحويل الصورة إلى مكون RGB فردي
في الكود أدناه ، أنشأنا مصفوفة من الأصفار بأبعاد الصورة HxW ، الصفر يعيد مصفوفة مليئة بالأصفار ولكن بنفس الأبعاد.
تعد وظيفة الشكل مفيدة للغاية عندما ننظر إلى أبعاد الصورة ، وهنا قمنا بتقطيع وظيفة الشكل هذه. لذا فإن الشكل سيأخذ كل شيء حتى النقاط المعينة ، أي ما يصل إلى النقاط المعينة الثانية والتي ستكون ارتفاع وعرض الصورة حيث يمثل الثالث مكون RGB للصورة ولا نحتاج إليه هنا.
استيراد cv2 استيراد numpy كـ np image = cv2.imread ('input.jpg') B، G، R = cv2.split (image) zeros = np.zeros (image.shape، dtype = "uint8") cv2.imshow ("RED"، cv2.merge ()) cv2.imshow ("Green"، cv2.merge ()) cv2.imshow ("أزرق"، cv2.merge ()) cv2.waitKey (0) cv2.destroyAllWindows ()
تمثيل الرسم البياني للصورة
تمثيل الرسم البياني للصورة هو طريقة تصور مكونات الصور.
يسمح لك الكود التالي بتحليل الصورة من خلال الرسم البياني اللوني لمكونات اللون المنفردة والمجمعة.
cv2 استيراد نمباي استيراد كما أرستها الحاجة #we إلى matplotlib الاستيراد لإنشاء الرسم البياني المؤامرات استيراد matplotlib.pyplot كما معاهدة قانون البراءات صورة = cv2.imread ('input.jpg') الرسم البياني = cv2.calcHist (،، لا يوجد ،،) #we مؤامرة ل الرسم البياني ، رافيل () يجعل صفيفنا plt.hist مصفوفة الصور (image.ravel ()، 256،) plt.show () # عرض قنوات الألوان المنفصلة color = ('b'، 'g'، 'r') # نحن نعلم افصل بين اللون ورسم كل في الرسم البياني لـ i ، العمود في التعداد (اللون): الرسم البياني 2 = cv2.calcHist (،، None ،،) plt.plot (Histogram2، color = col) plt.xlim () plt.show ()
دعونا نفهم وظيفة calcHist مع كل معلماتها الفردية
cv2.calcHist (الصور ، القنوات ، القناع ، الحجم ، النطاقات)
الصور: هي الصورة المصدر من نوع uint 8 أو float 32. يجب تقديمها بين أقواس مربعة ، أي "" ، والتي تشير أيضًا إلى مصفوفة المستوى الثاني لأن صورة opencv هي بيانات في شكل مصفوفة.
القنوات: ترد بين قوسين مربعين. إنه فهرس القناة الذي نحسب له الرسم البياني ، على سبيل المثال إذا كان الإدخال عبارة عن صورة ذات تدرج رمادي ، تكون قيمته ، بالنسبة للصور الملونة التي يمكنك تمريرها ، أو لحساب الرسم البياني للقناة الزرقاء والخضراء والحمراء على التوالي.
القناع: قناع الصورة. للعثور على الرسم البياني للصورة الكاملة ، يتم تقديمها كـ "لا شيء". ولكن إذا كنت تريد العثور على الرسم البياني لمنطقة معينة من الصورة ، فيجب عليك إنشاء صورة قناع لذلك ومنحها كقناع.
Histsize: هذا يمثل عدد BIN لدينا. يلزم وضعها بين قوسين معقوفين حتى نتمكن من تمرير المقياس الكامل.
النطاقات: هذا هو نطاقنا ، وعادة ما يكون
رسم الصور والأشكال باستخدام OpenCV
فيما يلي بعض الأمثلة لرسم الخطوط والمستطيل والمضلع والدائرة وما إلى ذلك في OpenCV.
استيراد cv2 استيراد numpy كـ np # إنشاء صورة مربعة سوداء = np.zeros ((512،512،3)، np.uint8) # يمكننا أيضًا إنشاء هذا باللونين الأبيض والأسود ، ولكن لن يكون هناك أي تغييرات image_bw = np.zeros ((512512)، np.uint8) cv2.imshow ("مستطيل أسود (لون)" ، صورة) cv2.imshow ("مستطيل أسود (أبيض وأسود)" ، image_bw)
خط
# إنشاء خط فوق مربع أسود # cv2.line (صورة ، إحداثيات البداية ، إحداثيات النهاية ، اللون ، السمك) # رسم خط قطري بسمك 5 بكسل صورة = np.zeros ((512،512،3)، np.uint8) cv2.line (صورة ، (0،0) ، (511،511) ، (255،127،0) ، 5) cv2.imshow ("خط أزرق" ، صورة)
مستطيل
# إنشاء مستطيل فوق مربع أسود # cv2.rectangle (صورة ، إحداثيات البداية ، إحداثيات النهاية ، اللون ، السمك) # رسم مستطيل بسمك 5 بكسل image = np.zeros ((512،512،3)، np.uint8) cv2.rectangle (صورة ، (30،50) ، (100،150) ، (255،127،0) ، 5) cv2.imshow ("مستطيل" ، صورة)
دائرة# إنشاء دائرة فوق مربع أسود # cv2.circle (صورة ، مركز ، نصف قطر ، لون ، تعبئة) image = np.zeros ((512،512،3)، np.uint8) cv2.circle (image، (100،100)، (50)، (255،127،0)، - 1) cv2.imshow ("دائرة" ، صورة)
مضلع#creating a polygon image = np.zeros ((512،512،3)، np.uint8) #lets تحدد أربع نقاط pts = np.array (،،،]، np.int32) #lets الآن تعيد تشكيل نقاطنا بالشكل المطلوب بواسطة الخطوط المتعددة pts = pts.reshape ((- 1،1،2)) cv2.polylines (image،، True، (0،255،255)، 3) cv2.imshow ("المضلع" ، الصورة)
نص#putting text using opencv # cv2.putText (image، 'text to display'، bootom يسار نقطة البداية، الخط، حجم الخط، اللون، السمك) image = np.zeros ((512،512،3)، np.uint8) cv2. putText (صورة، "hello world"، (75،290)، cv2.FONT_HERSHEY_COMPLEX، 2، (100،170،0)، 3) cv2.imshow ("hello world"، image) cv2.waitKey (0) cv2.destroyAllWindows ()
تعتبر رؤية الكمبيوتر و OpenCV موضوعات واسعة للغاية يجب تغطيتها ولكن هذا الدليل سيكون نقطة انطلاق جيدة لتعلم OpenCV ومعالجة الصور.