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

دمج صورتين في OpenCV | بايثون

Ali Ismael

السؤال

Recommended Posts

  • 0

يمكنك استخدام التابع cv2.hconcat لدمج الصورتين بشكل أفقي أو cv2.vconcat لدمجهما بشكل رأسي:

import cv2
import numpy as np
# قراءة الصورتين
im1 = cv2.imread(r'C:\Users\Windows.10\Desktop\All\test5 openeye.jpg')
im2 = cv2.imread(r'C:\Users\Windows.10\Desktop\All\test4 closedeye.jpg')
# دمج الصورتين أفقياً
horizontal_img = cv2.hconcat([cv2.resize(im1,(200,200)), cv2.resize(im2,(200,200))])
# دمجهما عمودياً
vertical_img = cv2.vconcat([cv2.resize(im1,(200,200)), cv2.resize(im2,(200,200))])
# عرضهما
cv2.imshow('Horizontal Image', horizontal_img)
cv2.imshow('Vertical Image', vertical_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

الخرج:
Untitled.thumb.png.b5f2058a74def46f3d585202870ca556.png
لاحظ أن ذلك ييتطلب أن تكون الصورتان بنفس الأبعاد وإلا فلن ينجح الأمر بالتأكيد.حيث قمت باستخدام الدالة resize لتعديل الأبعاد. كما يمكنك استخدام الدالة np.concatenate:

import numpy as np
import cv2
im1 = cv2.imread(r'C:\Users\Windows.10\Desktop\All\test5 openeye.jpg')
im2 = cv2.imread(r'C:\Users\Windows.10\Desktop\All\test4 closedeye.jpg')
# أفقي
vis = np.concatenate((im1, im1), axis=0)
# عمودي
# np.concatenate((im1, im1), axis=1)
cv2.imshow('Horizontal Image', vis)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

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

  • 0

يمكنك استخدام الدالة cv2.vconcat للدمج بشكل vertical أي رأسي والدالة cv2.hconcat للدمج بشكل horizontal أي أفقي.

المثال التالي يوضح كيفية دمج صورتين بشكل رأسي ولهم نفس الأبعاد:

import cv2
import numpy as np

#قراءة الصور
im1 = cv2.imread('data/src/lena.jpg')
im2 = cv2.imread('data/src/rocket.jpg')

#دمج الصور وعرضها
im_v = cv2.vconcat([im1, im1])
cv2.imwrite('data/dst/opencv_vconcat.jpg', im_v)

وتظهر كالتالي:

opencv_vconcat.jpg.09104c47175920f03ac9532db3e433fd.jpg

يمكنك كذلك دمج الصور التي ليس لها أبعاد متساوية كالتالي:

def vconcat_resize_min(im_list, interpolation=cv2.INTER_CUBIC):
    w_min = min(im.shape[1] for im in im_list)
    im_list_resize = [cv2.resize(im, (w_min, int(im.shape[0] * w_min / im.shape[1])), interpolation=interpolation)
                      for im in im_list]
    return cv2.vconcat(im_list_resize)

im_v_resize = vconcat_resize_min([im1, im2, im1])
cv2.imwrite('data/dst/opencv_vconcat_resize.jpg', im_v_resize)

وتظهر كالتالي بعد تعديل أبعادهم سويا:

opencv_vconcat_resize.thumb.jpg.e6c208fd0ff0def4a73c108bce669716.jpg

ويمكن استخدام نفس الطرق في دمج الصور أفقيا

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

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...