OpenCV2使用变换图变换图像

时间:2012-02-07 17:09:14

标签: image image-processing opencv transformation

给定两个cv :: Mat矩阵将源图像中的每个像素映射到目标图像中的像素(R2到R2),我想将源图像转换为目标图像。我已经成功地使用for循环,但它太慢了:

cv::Mat srcImg(100,100,CV_8U);

//fill...

cv::Mat dstImg(100,100,CV_8U);

//dst2src ->backprojection

//these matrices indicates for each pixel in the destination image, where to map it from the source image

cv::Mat x_dst2src(100,100,CV_64F);

cv::Mat y_dst2src(100,100,CV_64F);

//fill...

for(int ydst=0; ydst!=100;++ydst)

{

    for(int xdst=0; xdst!=100;++xdst)
     {
      double xsrc = x_dst2src.at<double>(ydst,xdst);
      double ysrc = y_dst2src.at<double>(ydst,xdst);
      double val = getBicubic(srcImg,xsrc,ysrc);
      dstImg.at<double>(ydst,xdst) = val;

     }

}

这个基本代码有效,但非常慢(我的图像大于100x100,我必须使用bicubic)。 谢谢,

-O -

1 个答案:

答案 0 :(得分:2)

一个不错的OpenCV函数叫做remap()。令人惊讶的是,这确实是这种转变。

为了加快速度,您应该寻找另一种功能,以一种比简单位置图更加处理器友好的格式准备地图。 (它类似于mapTransform(),在重映射()文档的see also部分中查找它

快乐重新映射!