KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I have a rectangular target of known dimensions and location on a wall, and a mobile camera on a robot. As the robot is driving around the room, I need to locate the target and compute the location of the camera and its pose. As a further twist, the camera's elevation and azimuth can be changed using servos. I am able to locate the target using OpenCV, but I am still fuzzy on calculating the camera's position (actually, I've gotten a flat spot on my forehead from banging my head against a wall for the last week). Here is what I am doing: Read in previously computed camera intrinsics file Get the pixel coordinates of the 4 points of the target rectangle from the contour Call solvePnP with the world coordinates of the rectangle, the pixel coordinates, the camera matrix and the distortion matrix Call projectPoints with the rotation and translation vectors ??? I have read the OpenCV book, but I guess I'm just missing something on how to use the projected points, rotation and translation vectors to compute the world coordinates of the camera and its pose (I'm not a math wiz) :-( 2013-04-02 Following the advice from "morynicz", I have written this simple standalone program. #include <Windows.h> #include "opencv\cv.h" using namespace cv; int main (int argc, char** argv) { const char *calibration_filename = argc >= 2 ? argv [1] : "M1011_camera.xml"; FileStorage camera_data (calibration_filename, FileStorage::READ); Mat camera_intrinsics, distortion; vector<Point3d> world_coords; vector<Point2d> pixel_coords; Mat rotation_vector, translation_vector, rotation_matrix, inverted_rotation_matrix, cw_translate; Mat cw_transform = cv::Mat::eye (4, 4, CV_64FC1); // Read camera data camera_data ["camera_matrix"] >> camera_intrinsics; camera_data ["distortion_coefficients"] >> distortio
Tags (comma-separated)
Save Edits
Cancel