2015-11-13 7 views
5

का उपयोग करने में त्रुटि मैं पाइथन 2.7 और ओपनसीवी 3.0.0 का उपयोग कर रहा हूं। मैं एक लाइव वीडियो पर एक मुद्रा अनुमान लगाने की कोशिश कर रहा हूँ। तो मैंने opencv द्वारा दिए गए calibrate.py का उपयोग किया। यह अच्छा काम करता है। इस कार्यक्रम में, मैंने अक्ष को पॉज़ करने के लिए सूचनाओं का इलाज करने के लिए अंत पंक्तियों में जोड़ा। मैंने इसका इस्तेमाल किया: http://docs.opencv.org/master/d7/d53/tutorial_py_pose.html#gsc.tab=0resolPnPRansac फ़ंक्शन

solPnPRansac फ़ंक्शन के साथ लाइन पर मैंने इसे लिखा: _, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs) लाइन की शुरुआत में _, जोड़ना।

मुझे यह त्रुटि दिखाई दे रही है!

error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\core\src\matrix.cpp:2294: error: (-215) d == 2 && (sizes[0] == 1 || sizes[1] == 1 || sizes[0]*sizes[1] == 0) in function cv::_OutputArray::create 

मुझे यह बिल्कुल समझ में नहीं आता!

क्या कोई मेरी मदद कर सकता है?

OutputArray  rvec, 
OutputArray  tvec, 
OutputArray  inliers = noArray(), 

इसलिए शुरुआत में _, को हटाने के कार्यक्रम काम फिर से बनाना चाहिए:

cap = cv2.VideoCapture(0) 

while(1): 


    # Take each frame 
    ret, frame = cap.read() 
    gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 

    # Find the chess board corners 
    ret, corners = cv2.findChessboardCorners(gray, (6,5),None) 

    if ret: 

     term = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_COUNT, 30, 0.1) 

     corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),term) 


     _, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs) 

     imgpts, jac = cv2.projectPoints(axis, rvecs, tvecs, camera_matrix, dist_coefs) 


     frame = draw(frame,corners2,imgpts) 

    cv2.imshow('img',frame) 

    k = cv2.waitKey(5) & 0xFF 
    if k == 27: 
     break 
cap.release() 
cv2.destroyAllWindows() 
+0

ही यहाँ में अधिक जानकारी प्राप्त कर सकते हैं, आप एक समाधान मिला:

आप अपने मॉडल के लिए अतिरिक्त आयाम शामिल करने के लिए इस कोड का उपयोग कर सकते हैं? –

उत्तर

2

मैं एक ही समस्या थी हैं। मैंने हल PNPRansac के बजाय resolPnP का उपयोग किया और यह ठीक काम किया। मुझे लगता है कि Python में हल PnPRansac एक बग है।

0

solvePnpRansac केवल तीन उत्पादन मूल्य हैं:

यहाँ वीडियो के इलाज के लिए मेरे कोड है।

+0

यह मेरे लिए काम नहीं करता है। मुझे मिलता है: rvec, tvec, inliers = cv2.solvePnPRansac (objp, corners2, K, D) cv2.error: C: \ builds \ master_PackSlaveAddon-win64-vc12-static \ opencv \ modules \ core \ src \ matrix.cpp : 2355: त्रुटि: (-215) डी == 2 और& (आकार [0] == 1 || आकार [1] == 1 || आकार [0] * आकार [1] == 0) समारोह सीवी में: : _OutputArray :: बनाने –

0

आपको उदाहरण में obj_points को उसी तरीके से परिभाषित करने की आवश्यकता है। मैं प्रदान की कोड स्निपेट में obj_points परिभाषा नहीं दिख रहा है और मुझे लगता है कि इस मुद्दे को

obj_points= np.zeros((6*7,3), np.float32) 
obj_points[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2) 
0

solPnP और resolPnPRansac के बीच 3 डी मॉडल बिंदु परिभाषा में एक अंतर है। Is not clear in the documentation, लेकिन हल करें पीएनपी को आयाम 3xN/Nx3 के साथ एक मैट्रिक्स के साथ परिभाषित मॉडल की आवश्यकता है और हल करें PNPRansac को आयाम 3x1xN/Nx1x3 के साथ मैट्रिक्स के साथ मॉडल की आवश्यकता है।

modelNx1x3 = np.zeros((N, 1, 3), np.float32) 
modelNx1x3[:, 0, :] = modelNx3[:, :] 

तुम भी the issue tracker in github