# छवि को ग्रेस्केल में बदलें
ग्रे = cv2.cvtColor (छवि, cv2.COLOR_BGR2GRAY)
# मार्कर आकार और कुल मार्करों के आधार पर अरुको शब्दकोश प्राप्त करें
शब्दकोश_कुंजी = getattr (cv2.aruco, f'DICT_{मार्कर आकार}एक्स'
एफ'{मार्कर आकार}_{कुलमार्कर}')
aruco_dictionary = cv2.aruco.getPreDefinedDictionary (dictionary_key)
# अरुको डिटेक्टर पैरामीटर सेट करें
aruco_params = cv2.aruco. डिटेक्टर पैरामीटर()
# ग्रेस्केल छवि में अरुको मार्करों का पता लगाएं
मार्कर_कॉर्नर, मार्कर_आईडी, _ = cv2.aruco.detectMarkers (ग्रे, aruco_dictionary,
पैरामीटर=aruco_params)
वीडियो_चौड़ाई, वीडियो_ऊंचाई):
फ़्रेम_ऊंचाई, फ़्रेम_चौड़ाई = वीडियो_फ़्रेम.आकार[:2]
अगर लेन (aruco_markers[0]) != 0:
के लिए मैं, मार्कर_कोना में गणना करें (aruco_markers[0]):
मार्कर_कॉर्नर = मार्कर_कॉर्नर.रीशेप((4, 2)).astype (np.int32)
# मार्कर कोनों के चारों ओर एक बहुभुज बनाएं
cv2.पॉलीलाइन्स (वीडियो_फ़्रेम, [मार्कर_कॉर्नर], सत्य, (0, 255, 0), 2)
# मार्कर के ऊपरी-बाएँ कोने पर टेक्स्ट के रूप में मार्कर आईडी जोड़ें
cv2.putText (वीडियो_फ़्रेम, str (aruco_markers[1][मैं]),
टपल (मार्कर_कोने[0]),
cv2.FONT_HERSHEY_SIMPLEX,0.5, (0, 255, 0), 2)
# मार्कर पर ओवरले छवि को मैप करने के लिए होमोग्राफी मैट्रिक्स ढूंढें
होमोग्राफी_मैट्रिक्स, _ = cv2.findHomography(
np.सरणी([[0, 0], [वीडियो_विड्थ, 0], [वीडियो_चौड़ाई, वीडियो_ऊंचाई],
[0, वीडियो_हाइट]], dtype="फ्लोट32"), मार्कर_कोने)
# होमोग्राफी मैट्रिक्स का उपयोग करके मार्कर के साथ संरेखित करने के लिए ओवरले छवि को विकृत करें
warped_image = cv2.warpPerspective (ओवरले_इमेज, होमोग्राफी_मैट्रिक्स,
(फ़्रेम_चौड़ाई, फ़्रेम_ऊंचाई))
# विकृत छवि को केवल मार्कर क्षेत्र पर लगाने के लिए एक मास्क बनाएं
मास्क = np.zeros((frame_height, frame_width), dtype="uint8")
cv2.fillConvexPoly (मास्क, मार्कर_कॉर्नर, (255, 255, 255), cv2.LINE_AA)
नकाबपोश_warped_image = cv2.bitवाइज_और (warped_image, warped_image,
मुखौटा = मुखौटा)
# वीडियो फ्रेम पर उलटा मास्क लगाएं
नकाबपोश_वीडियो_फ़्रेम = cv2.बिटवाइज़_और (वीडियो_फ़्रेम, वीडियो_फ़्रेम,
मास्क=cv2.बिटवाइज़_नॉट (मास्क))
# नकाबपोश विकृत छवि और नकाबपोश वीडियो फ्रेम को मिलाएं
वीडियो_फ़्रेम = cv2.जोड़ें (नकाबपोश_ताना_छवि, नकाबपोश_वीडियो_फ़्रेम)
# वीडियो फ़ीड के आयाम सेट करें
वीडियो_ऊंचाई = 480
वीडियो_चौड़ाई = 640
# वीडियो कैप्चर खोलें
वीडियो_कैप्चर = cv2.वीडियोकैप्चर(0)
# ओवरले छवि को लोड करें और उसका आकार बदलें
ओवरले_इमेज = सीवी2.रीसाइज (ओवरले_इमेज, (वीडियो_चौड़ाई, वीडियो_ऊंचाई))
जबकि video_capture.isOpened():
# वीडियो कैप्चर से एक फ़्रेम पढ़ें
पुनः, video_frame = video_capture.read()
अगर पुनः:
# वीडियो फ़्रेम में अरुको मार्कर ढूंढें
aruco_markers = ढूंढेंArucoMarkers (वीडियो_फ़्रेम, totalMarkers=100)
# वीडियो फ्रेम में मार्करों पर ओवरले छवि को सुपरइम्पोज़ करें
video_frame = superimposeImageOnMarkers (video_frame, aruco_markers,
ओवरले_छवि, वीडियो_चौड़ाई,
वीडियो_ऊंचाई)
# ओवरले के साथ वीडियो फ़्रेम प्रदर्शित करें
cv2.imshow("कैमरा फ़ीड", वीडियो_फ़्रेम)
# लूप से बाहर निकलने के लिए 'q' कुंजी दबाएँ की जाँच करें
अगर cv2.waitKey(1) & 0xFF == ऑर्ड('क्यू'):
तोड़ना