OpenCV 重映射

来源:互联网 发布:vmware mac os 10.9 编辑:程序博客网 时间:2024/05/22 14:35

原理:
重映射把一个图像中一个位置的像素放置到另一个图片指定位置的过程。
通过重映射来表达每个像素的位置 (x,y) : g(x,y) = f ( h(x,y) ),其中g为目标图像,f为原图像。
比如说这个函数:这里写图片描述,就是将图像按照x轴进行旋转。在下面的代码中所使用的也是这个函数。

函数:

void remap( InputArray src, OutputArray dst,                         InputArray map1, InputArray map2,                         int interpolation, int borderMode = BORDER_CONSTANT,                         const Scalar& borderValue = Scalar());

src: 源图像
dst: 目标图像,与 src 相同大小
map_x: x方向的映射参数. 它相当于方法 h(i,j) 的第一个参数
map_y: y方向的映射参数. 注意 map_y 和 map_x 与 src 的大小一致。
CV_INTER_LINEAR: 非整数像素坐标插值标志. 这里给出的是默认值(双线性插值).
BORDER_CONSTANT: 默认

代码:

int main(){    RNG rng(12345);    Mat a = imread("1RT05508-0.jpg");    imshow("原图", a);    Mat x, y;    x.create(a.size(), CV_32FC1);    y.create(a.size(), CV_32FC1);    for (int j = 0; j < a.rows; j++)    {        for (int i = 0; i < a.cols; i++)        {             x.at<float>(j, i) = static_cast<float>(a.cols - i);            y.at<float>(j, i) = static_cast<float>(j);        }    }    remap(a, a, x, y, CV_INTER_LINEAR);    imshow("效果图", a);    cvWaitKey(10000);}

运行图:
这里写图片描述

0 0
原创粉丝点击