C++中的remap()函数

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

C++:

void remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2,

                    int interpolation, intborderMode = BORDER_CONSTANT,

                    const Scalar& borderValue = Scalar())

  • 第一个参数:输入图像,即原图像,需要单通道8位或者浮点类型的图像
  • 第二个参数:输出图像,即目标图像,需和原图形一样的尺寸和类型
  • 第三个参数:它有两种可能表示的对象:(1)表示点(x,y)的第一个映射;(2)表示CV_16SC2,CV_32FC1等
  • 第四个参数:它有两种可能表示的对象:(1)若map1表示点(x,y)时,这个参数不代表任何值;(2)表示                                     CV_16UC1,CV_32FC1类型的Y值

  • 第五个参数:插值方式,有四中插值方式:(1)INTER_NEAREST——最近邻插值

                                                                     (2)INTER_LINEAR——双线性插值(默认)

                                                                     (3)INTER_CUBIC——双三样条插值(默认)

                                                                     (4)INTER_LANCZOS4——lanczos插值(默认)

  • 第六个参数:边界模式,默认BORDER_CONSTANT,可以不提供参数
  • 第七个参数:边界颜色,默认Scalar()黑色,可以不提供参数
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenCV的remap函数可以实现图像的重映射操作。它可以用于实现各种图像处理操作,例如图像缩放、旋转、镜像等。具体来说,remap函数可以将输入图像的每个像素映射到输出图像的新位置。 remap函数的原型如下: ```c++ void cv::remap(InputArray src, OutputArray dst, InputArray map1, InputArray map2, int interpolation, int borderMode, const Scalar& borderValue) ``` 参数说明: - src:输入图像。 - dst:输出图像。 - map1:第一个映射矩阵,可以是浮点型的二维数组或者单通道的浮点型图像。 - map2:第二个映射矩阵,可以是浮点型的二维数组或者单通道的浮点型图像。 - interpolation:插值方法,可以取以下值之一:INTER_NEAREST、INTER_LINEAR、INTER_CUBIC、INTER_AREA、INTER_LANCZOS4。 - borderMode:边界模式,可以取以下值之一:BORDER_CONSTANT、BORDER_REPLICATE、BORDER_REFLECT、BORDER_WRAP、BORDER_REFLECT_101。 - borderValue:边界值,当borderMode为BORDER_CONSTANT时,用于填充边界的像素值。 具体来说,remap函数将输入图像的每个像素(x,y)通过map1(x,y)和map2(x,y)映射到输出图像的位置(x',y'),然后使用指定的插值方法计算输出图像位置(x',y')处的像素值。如果映射矩阵的尺寸与输入图像的尺寸不匹配,则只处理匹配部分。 下面是一个简单的例子,演示如何使用remap函数实现图像的水平镜像: ```c++ cv::Mat input_image = cv::imread("input_image.jpg"); cv::Mat map_x(input_image.size(), CV_32FC1); cv::Mat map_y(input_image.size(), CV_32FC1); for (int i = 0; i < input_image.rows; i++) { for (int j = 0; j < input_image.cols; j++) { map_x.at<float>(i, j) = input_image.cols - j - 1; map_y.at<float>(i, j) = i; } } cv::Mat output_image; cv::remap(input_image, output_image, map_x, map_y, cv::INTER_LINEAR); cv::imshow("Input Image", input_image); cv::imshow("Output Image", output_image); cv::waitKey(0); ``` 上述代码,我们首先创建两个映射矩阵map_x和map_y,用于实现水平镜像。然后,我们将输入图像和映射矩阵作为参数调用remap函数,得到输出图像output_image。最后,我们使用imshow函数显示输入图像和输出图像。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值