2015-11-13 27 views
5

Tôi đang sử dụng Python 2.7 và opencv 3.0.0. Tôi đang cố thực hiện ước tính đặt ra trên video trực tiếp. Vì vậy, tôi đã sử dụng calibrate.py do opencv cung cấp. nó hoạt động tốt. Trong chương trình này, tôi đã thêm vào các dòng cuối để xử lý thông tin để đặt trục. Tôi đã sử dụng điều này: http://docs.opencv.org/master/d7/d53/tutorial_py_pose.html#gsc.tab=0Lỗi khi sử dụng chức năng resolvePnPRansac

Trên dòng có hàm resolvePnPRansac, tôi đã viết thay thế này: _, rvecs, tvecs, inliers = cv2.solvePnPRansac(obj_points[0], corners2, camera_matrix, dist_coefs) thêm _, ở đầu dòng.

Tôi gặp lỗi này khi xuất hiện!

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 

Tôi không hiểu gì cả!

Ai đó có thể giúp tôi không?

Đây là mã của tôi để điều trị các video:

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

tương tự ở đây, bạn đã tìm thấy một giải pháp? –

Trả lời

2

tôi đã cùng một vấn đề. Tôi đã sử dụng solutionPnP thay vì resolvePnPRansac và nó hoạt động tốt. Tôi đoán resolvePnPRansac trong python có lỗi.

0

solvePnpRansac chỉ có ba giá trị sản lượng:

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

để loại bỏ các _, trong đầu nên nội dung chương trình một lần nữa.

+0

Điều đó không hiệu quả đối với tôi. Tôi nhận được: rvec, tvec, inliers = cv2.solvePnPRansac (objp, góc2, K, D) cv2.error: C: \ builds \ master_PackSlaveAddon-win64-vc12-static \ opencv \ modules \ core \ src \ matrix.cpp : 2355: lỗi: (-215) d == 2 && (kích cỡ [0] == 1 || kích thước [1] == 1 || kích thước [0] * kích cỡ [1] == 0) trong hàm cv: : _OutputArray :: tạo –

0

Bạn cần xác định obj_points theo cách tương tự trong ví dụ. Tôi không thấy obj_points định nghĩa trong đoạn mã được cung cấp và tôi nghĩ đó là vấn đề

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

Có sự khác biệt về định nghĩa điểm mô hình 3D giữa resolvePnP và resolvePnPRansac. Is not clear in the documentation, nhưng solutionPnP cần mô hình được xác định bằng ma trận với kích thước 3xN/Nx3 và resolvePnPRansac cần mô hình với ma trận có kích thước 3x1xN/Nx1x3.

Bạn có thể sử dụng mã này để bao gồm các chiều kích thêm để mô hình của bạn:

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

Bạn cũng có thể tìm thêm chi tiết trong the issue tracker in github

Các vấn đề liên quan