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

مشكلة في استخدام الرمز n\ مع الدالة putText في OpenCV في بايثون

Ali Ismael

السؤال

أحاول وضع هذا النص ' Yesterday I was clever.. \n so I wanted to change the world ' على الصورة من خلال الدالة putText،  لكن عند عرض الصورة يظهر هكذا ' Yesterday I was clever.. ? so I wanted to change the world ' لكن كنت أتوقع أن تتم طباعة "so I wanted to change the world" في السطر الجديد لكن لم يتم التعرف على ال n\ فما المشكلة؟ هذا هو الكود:

import cv2
# قراءة الصورة
image = cv2.imread("/content/test.jpg")
# الخط
font = cv2.FONT_HERSHEY_SIMPLEX
# الإحداثيات
org = (100, 50)
# fontScale
fontScale = 1
# red color in BGR
color = (0, 0, 255)
# السماكة
thickness = 2
# استخدام cv2.putText() 
image = cv2.putText(image, 'Yesterday I was clever.. \n so I wanted to change the world.', org, font,
                    fontScale, color, thickness, cv2.LINE_AA)
# عرض
cv2.imshow(window_name, image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 

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

Recommended Posts

  • 1

الدالة putText لا تتعامل مع رموز مثل n\، لذا أنت مجبر على التعامل مع هذا الأمر بشكل يدوي، لذا إليك حل لمشكلتك:
نقوم بقسم النص إلى عدة أسطر من خلال الدالة split حيث تكون عملية التقسيم على أساس ظهور الرمز n\:

your_text.split('\n') ==> ['Yesterday I was clever.. ', 'so I wanted to change the world.']

ثم نقوم بالمرور على هذه الأسطر وإضافتها واحداً تلو الآخر، لكن قبل ذلك يجب أن نقوم بتحديد الموضع الابتدائي للإحداثي y (ارتفاع المكان الذي سنضع فيه أول سطر):

y0= 50 # 100 فلن نتلاعب به وسيبقى كما حددته في البداية أي  x أما الإحداثي  y الإحداثي 

ثم يجب أن نقوم بتحديد مسافة الانتقال بالبكسل (الانتقال من السطر الأول للثاني):

dy = 40 # 40 بكسل

ثم داخل الحلقة يجب أن نعرَف معادلة لطباعة باقي الأسطر وتحقيق الانتقال:

for i, line in enumerate(your_text.split('\n')):
    y = y0 + i*dy
    cv2.putText(image,line , (100,y), font,
                    fontScale, color, thickness, cv2.LINE_AA)

وبالتالي يكون الكود بعد التعديل:

import cv2
# قراءة الصورة
image = cv2.imread("/content/test.jpg")
# الخط
font = cv2.FONT_HERSHEY_SIMPLEX
# الإحداثيات
org = (100, 50)
# fontScale
fontScale = 1
# red color in BGR
color = (0, 0, 255)
# السماكة
thickness = 2
# استخدام cv2.putText() 
your_text='Yesterday I was clever.. \nso I wanted to change the world.'
y0= 50
dy = 40
for i, line in enumerate(your_text.split('\n')):
    y = y0 + i*dy
    cv2.putText(image,line , (100,y), font,
                    fontScale, color, thickness, cv2.LINE_AA)
cv2.imshow( image)
cv2.waitKey(0)
cv2.destroyAllWindows()

والنتيجة:
index.png.d2446c2913e907b422c729e45fc24e30.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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...