deffindArucoMarkers(الصورة ، markerSize =6، totalMarkers =250):
# تحويل الصورة إلى تدرج الرمادي
رمادي = cv2.cvtColor (صورة ، cv2.COLOR_BGR2GRAY)

# احصل على قاموس Aruco بناءً على حجم العلامة وإجمالي العلامات
Dictionary_key = getattr (cv2.aruco ، f'DICT_{علامة الحجم}X '
F'{علامة الحجم}_{totalMarkers}')

aruco_dictionary = cv2.aruco.getPredefinedDictionary (Dictionary_key)

# اضبط معلمات جهاز Aruco
aruco_params = cv2.aruco. الكاشفالمعلمات ()

# كشف علامات Aruco في الصورة ذات التدرج الرمادي
marker_corners ، marker_ids ، _ = cv2.aruco.detectMarkers (رمادي ، aruco_dictionary ،
المعلمات = aruco_params)

defركب ImageOnMarkers(video_frame ، aruco_markers ، overlay_image ،
video_width، video_height):
frame_height، frame_width = video_frame.shape [:2]

لو لين (aruco_markers [0]) != 0:
ل أنا ، علامة_زاوية في تعداد (aruco_markers [0]):
marker_corners = marker_corner.reshape ((4, 2)). astype (np.int32)

# ارسم مضلعًا حول زوايا العلامة
cv2.polylines (إطار_فيديو ، [marker_corners] ، حقيقي, (0, 255, 0), 2)

# أضف معرف العلامة كنص في الزاوية العلوية اليسرى من العلامة

instagram viewer

cv2.putText (video_frame، str (aruco_markers [1][أنا])،
tuple (marker_corners [0]),
cv2.FONT_HERSHEY_SIMPLEX ،0.5, (0, 255, 0), 2)

# ابحث عن مصفوفة التماثل لتعيين صورة التراكب على العلامة
homography_matrix، _ = cv2.findHomography (
np.array ([[[0, 0] ، [video_width ، 0] ، [video_width ، video_height] ،
[0، video_height]]، dtype ="تعويم 32") ، marker_corners)

# لف صورة التراكب لتتماشى مع العلامة باستخدام مصفوفة التماثل
warped_image = cv2.warpPerspective (overlay_image، homography_matrix،
(frame_width، frame_height))

# قم بإنشاء قناع لتطبيق الصورة الملتوية فقط على منطقة العلامة
قناع = np.zeros ((frame_height، frame_width)، dtype ="uint8")
cv2.fillConvexPoly (قناع ، علامة_زوايا ، (255, 255, 255) ، cv2.LINE_AA)

masked_warped_image = cv2.bitwise_and (warped_image ، warped_image ،
قناع = قناع)

# قم بتطبيق القناع العكسي على إطار الفيديو
masked_video_frame = cv2.bitwise_and (video_frame ، video_frame ،
قناع = cv2.bitwise_not (قناع))

# اجمع بين الصورة الملتوية المقنعة وإطار الفيديو المقنع
video_frame = cv2.add (masked_warped_image، masked_video_frame)

defعملية VideoFeed(صورة_تراكب):
# تعيين أبعاد تغذية الفيديو
video_height = 480
video_width = 640

# افتح التقاط الفيديو
video_capture = cv2.VideoCapture (0)

# قم بتحميل وتغيير حجم صورة التراكب
overlay_image = cv2.resize (overlay_image، (video_width، video_height))

بينما video_capture.is مفتوح ():
# اقرأ إطارًا من التقاط الفيديو
ret، video_frame = video_capture.read ()

لو ret:
# ابحث عن علامات Aruco في إطار الفيديو
aruco_markers = findArucoMarkers (video_frame، totalMarkers =100)

# قم بتركيب صورة التراكب على العلامات في إطار الفيديو
video_frame = superimposeImageOnMarkers (video_frame ، aruco_markers ،
overlay_image ، video_width ،
video_height)

# عرض إطار الفيديو مع تراكب
cv2.imshow ("موجز الكاميرا"، إطار الفيديو)

# تحقق من الضغط على مفتاح 'q' للخروج من الحلقة
لو cv2.waitKey (1) & 0xFF == أمر ("ف"):
استراحة