给定两个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 -
答案 0 :(得分:2)
一个不错的OpenCV函数叫做remap()。令人惊讶的是,这确实是这种转变。
为了加快速度,您应该寻找另一种功能,以一种比简单位置图更加处理器友好的格式准备地图。 (它类似于mapTransform(),在重映射()文档的see also
部分中查找它
快乐重新映射!