اذهب إلى المحتوى
  • 0

دمج الصور في OpenCV

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك ذلك من خلال جمع الصورتين مع إعطاء وزن لكل صورة (لتحديد الشفافية) مع إضافة تصحيح غاما (اختياري) وتوفر مكتبة OpenCV التابع addWeighted لإتمام المهمة:

img = cv2.addWeighted(source1, alpha, source2, beta, gamma)

حيث أن الوسيط الأول يمثل الصورة الأولى والوسيط الثاني alpha يمثل وزنها (مقدار الشفافية) والوسيط الثالث هو الصورة الثانية والرابع وزنها beta، حيث سيتم ضرب كل بكسل بالصورة الأولى ب alpha وكل بكسل في الثانية بقيمة beta، أما غاما فهي قيمة ستضاف للناتج (هنا هي لضبط شدة السطوع brightness أو التباين contrast في ألوان الصورة بغاية زيادة جودتها). المعادلة التالية  تعبر عن العملية حيث تعتمد قيمة كل بكسل من بكسلات الخرج التي ستمثل الصورة الممزوجة على المعادلة التالية:

G(x)= alpha*f0(x)+(1  alpha)*f1(x) + gamma
# أو بشكل أبسط
Image= alpha * image1 + beta * image2 + y +gamma

نلاحظ أنه من خلال تغيير قيمة ألفا، والتي ستتراوح من 0 إلى 1، يمكننا بسهولة التحويل من صورة إلى أخرى، وتتراوح قيمة هذه الأوزان من 0 إلى 1، ومن ثم يمكننا الحصول على العرض المطلوب للصور حسب حاجتنا. وبالنسبة لغاما يمكنك ضبطها على 0 لكي تتجاهل تأثيرها.
والمثال التالي سيوضح ذلك، حيث سنقوم بدمج الصورتين التاليتين:
             closedeye1.jpg.821d61f430490c4cdc2ef58d6de75dd3.jpg                                                                car.jpg.6c92796eefca2324c5946b0b2d18f548.jpg
والكود اللازم:

import cv2 as cv
# نقوم بقراءة الصور
img1 = cv.imread(r'C:\Users\Windows.10\Desktop\Safedrive\closedeye1.jpg',1)
img2 = cv.imread(r'C:\Users\Windows.10\Desktop\Safedrive\car.jpg',1)
# عرض أبعاد الصورة الثانية
img2.shape
# (194, 259, 3)
# أبعاد الصورة الأولى 
img1.shape
# (186, 271, 3)
#resize يجب أن تكون أبعاد الصور متاطابقة لذا نوحد حجمهما من خلال التابع
img2 = cv.resize(img2,(190,250))
img1 = cv.resize(img1,(190,250))
# أو كان بالإمكان جعل حجم الصورة الثانية مطابقة للأولى كالتالي
# img2 = cv2.resize(img2,(img1.shape[1],img1.shape[0])) 
# لكن الطريقة الأولى أفضل في حال كانت الصورتين بأبعاد مختلفة وللتحكم بذلك بشكل أدق
# اللآن سنقوم بدمج الصورتين
img = cv.addWeighted(img1,0.6,img2,0.4,0)
cv.imshow('image',img)
cv.waitKey(0)
cv.destroyAllWindows()
cv2.destroyAllWindows()

الخرج:
blend.png.39955eaba82f03e7ec9d8a74fcb57725.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...