جعلت مكتبة OpenCV Python من الممكن أتمتة عملية دمج صور متعددة في صورة بانورامية واحدة.

التصوير البانورامي هو أسلوب التقاط مجال رؤية أوسع لا تستطيع صورة واحدة تحقيقه. تدمج هذه التقنية صورًا متعددة معًا لإنشاء صورة واحدة تلتقط المشهد بأكمله بطريقة غامرة.

بمساعدة Python ، يمكنك أتمتة هذه العملية وإنشاء صور بانورامية جميلة بسهولة.

إعداد بيئة بايثون الخاصة بك

للمتابعة ، يجب أن يكون لديك ملف الفهم الأساسي لبايثون. قم بتشغيل أي Python IDE و إنشاء بيئة افتراضية جديدة. قم بإنشاء ملف Python جديد. وعلى المحطة ، قم بتشغيل الأمر التالي لتثبيت OpenCV.


نقطة تثبيت opencv-Contrib-python

سوف تستخدم ملف opencv-Contrib-python مكتبة لتحميل الصور ومعالجتها. لديها cv2.Stitcher الفئة التي ستستخدمها لإنشاء الصور البانورامية.

يتوفر في هذا الكود المصدري الكامل ونماذج الصور المستخدمة في هذه المقالة مستودع جيثب.

استيراد المكتبات المطلوبة

قم باستيراد ملف السيرة الذاتية 2 و نظام التشغيل وحدات في البرنامج النصي الخاص بك. ستستخدم نظام التشغيل للتنقل عبر مسارات النظام.

يستورد السيرة الذاتية 2
يستورد نظام التشغيل

ال وحدة نظام التشغيل هي وحدة نمطية مضمنة في Python. هذا هو السبب في أنك لست بحاجة إلى تثبيته خارجيًا.

instagram viewer

تحميل الصور

قم بإنشاء وظيفة لتحميل الصور التي تريد تركيبها. أولاً ، قم بإنشاء قائمة فارغة لتخزين الصور الأولية. ثم قم بالتكرار خلال كل ملف في مسار المجلد للتحقق مما إذا كان الملف عبارة عن صورة أم لا. إذا كانت صورة ، فقم بتحميلها وإلحاقها بقائمة الصور.


defتحميل الصور(مسار الملف):
# تحميل الصور من مجلد وتغيير حجمها.
الصور = []
ل اسم الملف في os.listdir (folder_path):
# تحقق مما إذا كان الملف هو ملف صورة
لو filename.endswith (".jpg") أو filename.endswith ('.بي إن جي'):
# قم بتحميل الصورة باستخدام OpenCV وقم بتغيير حجمها
image = cv2.imread (os.path.join (folder_path، filename))
images.append (صورة)
يعود الصور

يمكنك إضافة المزيد من تنسيقات ملفات الصور لتنويع برنامجك. هذا الرمز سيبحث فقط عن .jpg و .بي إن جي تنسيقات الملفات.

تغيير حجم الصور للحصول على غرزة موحدة ومعالجة أسرع

قم بإنشاء وظيفة من شأنها تغيير حجم قائمة الصور. ستقوم الوظيفة بالتكرار خلال كل صورة في القائمة وتغيير حجمها. أخيرًا ، قم بإلحاق الصور التي تم تغيير حجمها بقائمة جديدة.


defتغيير حجم الصور(الصور ، العرض ، الارتفاع):
resized_images = []
ل صورة في الصور:
resized_image = cv2.resize (الصورة ، (العرض ، الارتفاع))
resized_images.append (بحجم_صورة)
يعود بحجم_الصور

يؤدي تغيير الحجم إلى التأكد من أن خياطة الصور موحدة. كما أنه يقلل من حجم الملف لمعالجة أسرع.

استخدام وحدة Stitcher الخاصة بـ OpenCV لتقطيع الصور

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


defغرزة الصور(صور):
آلة الخياطة = cv2.Stitcher.create ()
(status، Stitched_image) = stitcher.stitch (صور)
لو الحالة == cv2.STITCHER_OK:
يعود مخيط الصورة
آخر:
يعودلا أحد

إذا كانت الغرز ناجحة (كما هو موضح بواسطة ملف cv2.STITCHER_OK رمز الحالة) ، ستعيد الوظيفة الصورة المخيطة. خلاف ذلك ، سوف يعود لا أحد.

قص الصورة المخيطة

قم بإنشاء وظيفة تأخذ الصورة المخيطة وإعادتها بعد قصها. أولاً ، قم بتحويل الصورة المخيطة إلى تدرج رمادي. ثم قم بتطبيق عتبة ثنائية لإنشاء صورة ثنائية. أخيرًا ، ابحث عن أكبر محيط في الصورة الثنائية واحسب المستطيل المحيط به.


defقص الصوره(صورة):
رمادي = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY)
عتبة = cv2.threshold (رمادي ، 0, 255، cv2.THRESH_BINARY) [1]
ملامح = cv2.findContours (عتبة ، cv2.RETR_EXTERNAL ، cv2.CHAIN_APPROX_SIMPLE) [0]
x ، y ، w ، h = cv2.boundingRect (ملامح [0])
cropped_image = صورة [y: y + h ، x: x + w]
يعود اقتصاص الصورة

يتم اقتصاص الصورة المخيطة باستخدام المستطيل المحيط.

معاينة وحفظ الصورة المخيطة باستخدام OpenCV

قم بإنشاء وظيفة تعرض الصورة المخيطة في نافذة تفاعلية وستحفظها على القرص.


defمعاينة الصورة وحفظها(صورة ، folder_path ، folder_name):
# عرض الصورة المخيطة
ملف cv2.Window ("صورة مخيطة"، cv2.WINDOW_NORMAL)
cv2.imshow ("صورة مخيطة"، صورة)
cv2.waitKey (0)

# احفظ الصورة المخيطة
output_filename = os.path.join (folder_path، folder_name + "_panorama.jpg")
cv2.imwrite (output_filename ، صورة)
مطبعة("تم حفظ الصورة المخيطة للمجلد:"، إسم الملف)

يتم حفظ صورة البانوراما في نفس المجلد الذي يحتوي على الصور الأصلية.

التحكم في تدفق برنامجك

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


defغرزة مجلد(folder_path ، العرض =800الارتفاع =800):
# غرزة جميع الصور في مجلد وحفظ النتيجة.
# قم بتحميل الصور من المجلد
الصور = load_images (folder_path)

# تحقق مما إذا كانت هناك صورتان على الأقل في المجلد
لو لين (صور) < 2:
مطبعة("الصور غير كافية في المجلد:"، مسار الملف)
يعود

# تغيير حجم الصور
resized_images = resize_images (صور ، عرض ، ارتفاع)

# غرزة الصور
Stitched_image = stitch_images (صور_تم تغيير حجمها)
لو مخيط الصورة يكونلا أحد:
مطبعة("فشل تركيب المجلد:"، مسار الملف)
يعود

# اقتصاص الصورة المخيطة
cropped_image = صور_محصول (صورة_ مخيط)

# معاينة وحفظ الصورة المخيطة
folder_name = os.path.basename (folder_path)
معاينة_و_صورة_الحفظ (صورة_قصاص ، مسار_المجلد ، اسم_المجلد)

قم بتمرير مسار المجلد الذي يحتوي على الصور التي تريد دمجها.

Stitch_folder ("sample_images") 

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

بدون هذه الميزات ، سيكون من الصعب على OpenCV محاذاة الصور وإنشاء بانوراما سلسة.

اختبار البرنامج الخاص بك

اجمع الصور التي تريد تحويلها إلى صورة بانورامية. تأكد من أن لديهم ميزات متداخلة.

ألق نظرة على التل في هذه الصورة الأولى.

في هذه الصورة الثانية ، التل مرئي قليلاً. هذا يخلق ميزة متداخلة.

احفظ الصور في مجلد. قم بتمرير مسار المجلد إلى ملف غرزة مجلد وظيفة للخياطة. ثم قم بتشغيل البرنامج.

قام البرنامج بتجميع الصور معًا وإنشاء صورة بانورامية ذات رؤية أوسع للمشهد. لاحظ أنه لإنشاء الصورة البانورامية أعلاه ، تم استخدام تسع صور موجودة في مستودع GitHub المذكور أعلاه.

التلاعب بالصور باستخدام OpenCV

يوضح إنشاء الصور البانورامية بعض تقنيات معالجة الصور العديدة التي يوفرها OpenCV. هناك المزيد من التقنيات التي يمكنك استخدامها لمعالجة الصور لتناسب احتياجاتك. سيساعدك العمل على المزيد من المشاريع التي تتضمن التلاعب بالصور على تحسين مهارات رؤية الكمبيوتر لديك بشكل عام.