您的位置:首页 > 运维架构

OpenCV 重映射

2015-09-07 22:00 495 查看
原理:

重映射把一个图像中一个位置的像素放置到另一个图片指定位置的过程。

通过重映射来表达每个像素的位置 (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);
}


运行图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: