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

إضافة إطار إلى الصورة باستخدام OpenCV في بايثون

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك استخدام الدالة copyMakeBorder للقيام بالمطلوب:

 cv2.copyMakeBorder(src, top, bottom, left, right, borderType, value)

حيث أن الوسيط الأول هو الصورة، والثاني هو عرض الإطار العلويَ الذي سيضاف إلى الصورة مقدراً بالبكسل، والثالث عرض الإطار السفلي، والرابع اليساري والخامس اليميني، أما borderType فهو نوع الحدود المراد إضافتها. يتم تعريفه بواسطة واصفات مثل:
cv2.BORDER_CONSTANT: يضيف حداً ملوناً ثابتاً (نضع قيمة للوسيط value).
cv2.BORDER_REFLECT: ستكون الحدود انعكاساً عكسياً لعناصر الحدود. أي مثلاً إذا كانت الصورة تحتوي على أحرف "abcdefg" ، فسيكون الإخراج "gfedcba | abcdefg | gfedcba".
cv2.BORDER_REFLECT_101 أو cv2.BORDER_DEFAULT: يقوم بنفس عمل cv2.BORDER_REFLECT ولكن مع تغيير طفيف. أي مثلاً إذا كانت الصورة تحتوي على أحرف "abcdefgh" ، فسيكون الإخراج "gfedcb | abcdefgh | gfedcba".
cv2.BORDER_REPLICATE: يكرر العنصر الأخير. لنفترض إذا كانت الصورة تحتوي على أحرف "abcdefgh" ، فسيكون الإخراج "aaaaa | abcdefgh | hhhhh".
أما الوسيط الأخير فهي وسيطة اختيارية تحدد لون الحدود إذا كان نوع الحد هو cv2.BORDER_CONSTANT.
مثال:

import cv2
# تحديد مسار الصورة
path = r'/content/test.jpg'
# قراءة الصورة
image = cv2.imread(path)
# إضافة الإطار سماكته 7 بكسل بكل الاتجاهات
image = cv2.copyMakeBorder(image, 7, 7, 7, 7, cv2.BORDER_CONSTANT,
                           None, value = (0,0,255))
# عرض الصورة
from google.colab.patches import cv2_imshow
cv2_imshow(image)

النتيجة:
index.thumb.png.ab3e4b9e29c875dd2563118849420528.png

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

  • 1

يمكنك استخدام الدالة copyMakeBorder لعمل الإطار كما في الإجابة السابقة مع امكانية تغيير شكل اللون والخط وسمك الخط ...

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

import cv2
import numpy as np     

#مكان الصورة
img=cv2.imread("C:\\Users\\ahmed\\Desktop\\img_src.jpg")
#أبعاد الصورة
h,w=img.shape[0:2]

#زيادة أبعاد الصورة لوضع الإطار
base_size=h+20,w+20,3

# ملئ الإطار بالأصفار
base=np.zeros(base_size,dtype=np.uint8)
cv2.rectangle(base,(0,0),(w+20,h+20),(255,255,255),30) 
base[10:h+10,10:w+10]=img 

cv2.imwrite('C:\\Users\\ahmed\\Desktop\\border.png',img)

وتظهر هكذا:

22.png.ae4582b91818bb28df80e3af242741c8.png

تم التعديل في بواسطة Ahmed Sharshar
رابط هذا التعليق
شارك على الشبكات الإجتماعية

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...