如何使用c ++将图像从一个坐标系转换为另一个坐标系

时间:2016-10-25 22:19:23

标签: c++ opencv ros

我有来自两个不同相机的两张图像,我已经完成了内部和外部校准。

我已经完成了从相机到base_link帧的点云(3D)转换并加在一起(点云注册)。

我想对2D图像做同样的事情。也就是说,我想要转换这两个图像并将它们加在一起,这样我就可以得到一张大图像,好像是从一台摄像机拍摄的。

我的方法是否正确。如果是这样我该怎么做。

提前致谢。

更新

这就是我想要做的事情,

    listener->waitForTransform(reference_frame, camera_link, ros::Time(0), ros::Duration(5.0));
    listener->lookupTransform(reference_frame, camera_link,  ros::Time(0), transform);

    cv::Mat t(4,4,CV_64F, cvScalar(0.0));

    t.at<double>(3,0) = transform.getOrigin().getX();
    t.at<double>(3,1) = transform.getOrigin().getY();
    t.at<double>(3,2) = transform.getOrigin().getZ();

    t.at<double>(0,0) = transform.getRotation().getX() / transform.getRotation().getW();
    t.at<double>(1,1) = transform.getOrigin().getY() / transform.getRotation().getW();
    t.at<double>(2,2) = transform.getOrigin().getZ() / transform.getRotation().getW();

    t.at<double>(3,0) = 1;
    t.at<double>(3,1) = 1;
    t.at<double>(3,2) = 1;

    t.at<double>(3,3) = 1;

    cv::Mat inputImag = cv_ptr->image;
    cv::Mat dest;
    cv::Size size(inputImag.cols,inputImag.rows);
    cv::warpAffine(inputImag, dest, t, size);

我收到以下错误,

OpenCV Error: Assertion failed ((M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 2 && M0.cols == 3) in warpAffine, file /build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/imgwarp.cpp, line 3455
terminate called after throwing an instance of 'cv::Exception'
  what():  /build/buildd/opencv-2.4.8+dfsg1/modules/imgproc/src/imgwarp.cpp:3455: error: (-215) (M0.type() == CV_32F || M0.type() == CV_64F) && M0.rows == 2 && M0.cols == 3 in function warpAffine

有人可以帮我解决这个问题。

0 个答案:

没有答案