2016-04-30 20 views
5

Tôi có tọa độ thế giới 3D của một đối tượng và tôi muốn lấy tọa độ của nó trong mặt phẳng camera-2D. Tôi đã hiệu chuẩn máy ảnh bằng cách sử dụng cv::calibrateCamera, để tôi có ma trận máy ảnh biến dạngCoeffs.Tọa độ 3D của dự án OpenCV với tọa độ máy ảnh 2d

Để chiếu tọa độ 3D đến tọa độ 2 máy ảnh, tôi sử dụng cv::projectPoints. Documentation nói:

trống projectPoints (InputArray objectPoints, InputArray rvec, InputArray tvec, InputArray cameraMatrix, InputArray distCoeffs, OutputArray imagePoints, OutputArray Jacobian = noArray (), double aspectRatio = 0)

Làm cách nào để nhận được rvec/tvec và phương pháp tiếp cận của tôi có đúng không?calibrateCamera mang lại cho tôi rvecstvecs, nhưng chúng dành cho mỗi đầu vào bàn cờ-hình ảnh và tôi đoán, chúng là vòng xoay và bản dịch của bàn cờ chứ không phải của máy ảnh.

+0

Vâng, chúng mô tả xoay và dịch của máy ảnh tương ứng với bàn cờ. Nếu bạn biết việc xoay và dịch của bàn cờ liên quan đến hệ thống tọa độ thế giới của bạn, bạn có thể dễ dàng tính toán extrinsics của máy ảnh của bạn trong hệ tọa độ thế giới. – sietschie

+0

Nhưng tại sao tôi cần ma trận dịch/xoay này? Nó chỉ hoạt động với ma trận máy ảnh (= chiếu?)? – black

+0

Ma trận máy ảnh chỉ chứa các tham số [nội tại] (https://en.wikipedia.org/wiki/Camera_resectioning#Intrinsic_parameters) như độ dài tiêu cự chứ không phải [bên ngoài] (https://en.wikipedia.org/wiki/ Các tham số Camera_resectioning # Extrinsic_parameters) là các tham số xoay và dịch của máy ảnh. – sietschie

Trả lời

2

Như tôi có ma trận chiếu (P), tôi có thể tính toán tọa độ 2D (x) trong mặt phẳng máy ảnh như thế này từ 3D-tọa X (sử dụng tọa độ đồng nhất):

x (u, v, w) = P * x (x1, x2, x3, w)

tôi chỉ có một vấn đề với cải, vì vậy mà tôi không nhận được phép chiếu chính xác đến hình ảnh 2ngày của tôi. Xem tại đây: OpenCV stereo vision 3D coordinates to 2D camera-plane projection different than triangulating 2D points to 3D

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