像素重映射

像素重映射是将输入图像的像素按特定规则映射到新图像的过程,涉及水平翻转等操作。在映射过程中,可能需要进行非整数像素坐标插值。OpenCV的remap函数实现此功能,接受输入图像、映射坐标表及插值、边界处理方式等参数。常用插值方法和边界处理方式包括线性差值、反射、外包装、常量复制等。代码示例中,对某些情况加0.5能改善图像效果。
摘要由CSDN通过智能技术生成

原理

  • 把输入图像中各个像素按照一定的规则映射到另外一张图像的对应位置上去,形成一张新的图像。简单来说,就是把一个图像中一个位置的像素放置到另一个图片指定位置的过程。
    在这里插入图片描述
  • 假设我们有一个图像 I , 我们想满足下面的条件作重映射:
    h(x,y) = (I.cols - x, y )
    图像会按照 x 轴方向发生水平翻转:
    在这里插入图片描述 在这里插入图片描述
  • 为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的.

API介绍:remap

  • remap(
    InputArray src, //输入图像
    OutputArray dst, //输出图像
    InputArray map_x, // x 映射表 CV_32FC1/CV_32FC2
    InputArray map_y, // y 映射表 CV_32FC1/CV_32FC2
    int interpolation, //插值方法,线性差值等
    int borderMode, //边缘填充方法,默认BORDER_CONSTANT
    const Scalar borderValue //color

  • 注1:interpolation 插值方式:
    在这里插入图片描述

  • 注2:borderMode:图像边界处理方式,边界的类型有以下几种:
    1)BORDER_REPLICATE:重复: aaaaaa|abcdefgh|hhhhhhh
    2)BORDER_REFLECT:反射: fedcba|abcdefgh|hgfedcb
    3)BORDER_REFLECT_101:反射101: gfedcb|abcdefgh|gfedcba
    4)BORDER_WRAP:外包装: cdefgh|abcdefgh|abcdefg
    5)BORDER_CONSTANT:常量复制: iiiiii|abcdefgh|iiiiiii(i的值由后一个参数Scalar()确定,如Scalar::all(0) )

  • 注3:borderValue:若上一参数为BORDER_CONSTANT,则由此参数确定补充上去的像素值。可选用默认值。

完整代码示例:

Mat src, dst, map_x, map_y;
int index = 0;
void update_map(int, void*);

int main()
{
   
	src = imread("E:/Image/ylj.jpg");
	if (src.empty())
	{
   
		cout << "could not load image..." << endl;
		return 0;
	}
	imshow("src image", src);

	m
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值