मैं कैमरे की सापेक्ष स्थिति को शतरंज (या दूसरी तरफ) में ढूंढने की कोशिश कर रहा हूं - मुझे अलग समन्वय प्रणालियों के बीच परिवर्तित करने के साथ ठीक लगता है, उदा। जैसा कि here सुझाया गया है। मैंने न केवल अंशांकन के लिए शतरंज का उपयोग करने का फैसला किया बल्कि वास्तविक स्थिति निर्धारण के साथ-साथ इस चरण में, क्योंकि (और यह ठीक काम करता है) प्राप्त करने के लिए मैं findChessboardCorners
का उपयोग कर सकता हूं।ओपनसीवी: resolPnP tvec इकाइयों और अक्ष निर्देश
मैंने इस विषय पर बहुत कुछ पढ़ा है और मुझे लगता है कि मैं solvePnP
आउटपुट को समझता हूं (भले ही मैं openCV
और सामान्य रूप से कंप्यूटर दृष्टि से बिल्कुल नया हूं)। दुर्भाग्यवश, मुझे परिणाम solvePnP
से मिलता है और परीक्षण सेट-अप को शारीरिक रूप से मापना अलग-अलग होता है: ज़ेड-दिशा में अनुवाद लगभग बंद होता है। 25%। x
और y
दिशानिर्देश पूरी तरह गलत हैं - कैमरे समन्वय प्रणाली (एक्स छवि को इंगित करने, दाईं ओर वाई, कैमरे से दूर जेड) की तुलना में परिमाण और विभिन्न दिशा के कई आदेश। अगर मैं tvec
और rvec
को विश्व निर्देशांक में कैमरा पॉज़ में परिवर्तित करता हूं तो अंतर बनी रहती है।
मेरे प्रश्न हैं:
- का कैमरा और दुनिया समन्वय प्रणाली 'कुल्हाड़ियों दिशाओं क्या हैं?
solvePnP
उसी इकाइयों में अनुवाद आउटपुट करता है जैसा कि मैंनेobjectPoints
निर्दिष्ट किया है?- मैंने विश्व उत्पत्ति को
objectPoints
(शतरंज कोनों में से एक) के रूप में निर्दिष्ट किया है। क्या यह ठीक है औरtvec
कैमरा निर्देशांक से बिल्कुल उस बिंदु का अनुवाद है?
यह (मैं इसे अग्रिम के रूप में यह किसी भी अपवाद आदि फेंक नहीं है संलग्न) मेरे कोड है। मैंने कैलिब्रेशन के दौरान कैमरा इंट्रिनिक्स मैट्रिक्स और विकृति गुणांक प्राप्त करने के लिए ग्रेस्केल छवियों का उपयोग किया, इसलिए ग्रेस्केल में स्थानीयकरण करने का भी निर्णय लिया। chessCoordinates
उत्पत्ति (कोने बिंदुओं में से एक) के संबंध में मिमी में शतरंज बिंदु स्थान की एक सूची है। camMatrix
और distCoefficients
अंशांकन से आते हैं (उसी शतरंज और objectPoints
का उपयोग करके प्रदर्शन किया जाता है)।
camCapture=cv2.VideoCapture(0) # Take a picture of the target to get the imagePoints
tempImg=camCapture.read()
imgPts=[]
tgtPts=[]
tempImg=cv2.cvtColor(tempImg[1], cv2.COLOR_BGR2GRAY)
found_all, corners = cv2.findChessboardCorners(tempImg, chessboardDim)
imgPts.append(corners.reshape(-1, 2))
tgtPts.append(np.array(chessCoordinates, dtype=np.float32))
retval,myRvec,myTvec=cv2.solvePnP(objectPoints=np.array(tgtPts), imagePoints=np.array(imgPts), cameraMatrix=camMatrix, distCoeffs=distCoefficients)
ग्रेट उत्तर, बहुत बहुत धन्यवाद। मैं कहीं पहले इस सामान में से कुछ के पास आया हूं, लेकिन कुछ आश्वासन प्राप्त करना अच्छा है। इसके अलावा, समन्वय प्रणाली अक्षों की व्याख्या बेहद उपयोगी है, क्योंकि मैं इस तरह से कुछ नहीं मिला है। चीयर्स। –