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

رسم مستطيل Rectangle لتحديد ال regions of interest(ROI) في الصورة OpenCV | بايثون

Ali Ismael

السؤال

Recommended Posts

  • 1

يمكنك استخدام التابع rectangle الذي يقوم برسم مستطيل على الصورة عن طريق المتغيرات التالية:

cv2.rectangle(image, start_point, end_point, color, thickness)
x1,y1 ------
|          |
|          |
|          |
--------x2,y2

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

import numpy as np
import cv2
from matplotlib import pyplot as plt
from google.colab.patches import cv2_imshow
img = cv.imread('/content/٢٠٢٠٠٧٣١_١٦٢٨٠٥.jpg')
# رسم مستطيل يحدد الوجه
cv2.rectangle(img,(405,370),(320,275),(0,255,0),3)
cv2_imshow(img)

الخرج:
index.png.3ed61922422d01b8888599659065eb2a.png

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

  • 0

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

import cv2
import numpy as np

 #مكان الصورة
img_path="image.jpeg"

#قراءة الصورة
img_raw = cv2.imread(img_path)

#استخدام الدالة
roi = cv2.selectROI(img_raw)

#اظهار المكان
print(roi)

#قص المنطقة التي تم تحديدها
roi_cropped = img_raw[int(roi[1]):int(roi[1]+roi[3]), int(roi[0]):int(roi[0]+roi[2])]

#اظهار الصورةالمقصوصة
cv2.imshow("ROI", roi_cropped)

#حفظ الصورة المقصوصة
cv2.imwrite("crop.jpeg",roi_cropped)


cv2.waitKey(0)

وتظهر كالتالي:Select-roi-in-python-1024x606.thumb.png.828a5289daf84e2f59c279b70fb6a775.png

يمكنك كذلك استخدامها لقص عدة أماكن مرة واحدة كالتالي:

import cv2
import numpy as np


img_path="image.jpeg"

img_raw = cv2.imread(img_path)


ROIs = cv2.selectROIs("Select Rois",img_raw)


print(ROIs)

crop_number=0 

#تحديد الأماكن المراد قصها
for rect in ROIs:
	x1=rect[0]
	y1=rect[1]
	x2=rect[2]
	y2=rect[3]

        #قص الأماكن 
	img_crop=img_raw[y1:y1+y2,x1:x1+x2]

        
        cv2.imshow("crop"+str(crop_number),img_crop)

	
	cv2.imwrite("crop"+str(crop_number)+".jpeg",img_crop)
        
	crop_number+=1


cv2.waitKey(0)

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

Multiple-ROI-in-opencv-python-1024x481.thumb.png.da9f014fd659e086c5c46e0aa6b53a3a.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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...