重映射

重映射的概念

重映射就是把一幅图像中的某位置的像素放置到另一个图片的指定位置的过程。为了完成映射过程,需要获取一些插值为非整数像素的坐标,因为源图像与目标图像的像素坐标不是一一对应的。一般情况下,我们通过重映射来表达每个像素的位置(x,y),想这样


在这里,g()是目标图像,f()是源图像,而h(x,y)是作用于(x,y)的映射方法函数。

在OpenCV中,可以使用函数remap()来实现简单重映射。

实现重映射:remap() 函数

remap()函数会根据指定的映射形式,将源图像进行重映射几何变换,基于的公式为


需要注意,此函数不支持就地操作

void remap(InputArray src,

                  OutputArray dst,

                  InputArray map1,

                  InputArray map2,

                  int interpolation,

                  int borderMode =BORDER_CONSTANT,

                  const Scalar& borderValue =Scalar());

函数参数详解



代码示例:

NSString *image = @"dkdk.jpg";    

UIImage *image1 = [UIImage imageNamed:image];    

Mat im;   

 UIImageToMat(image1, im);       

 if (im.empty()) {                return;    }       

 Mat srcImage,dstImage;    

Mat map_x,map_y;        // 创建和原始图一样的效果图,x重映射图,y重映射图    

dstImage.create(im.size(), im.type());    

map_x.create(im.size(), CV_32FC1);   

 map_y.create(im.size(), CV_32FC1);        

// 双层循环,遍历每一个像素点,改变map_x和map_y的值    

for (int j = 0; j < im.rows; j++) {        

for (int i = 0; i < im.cols; i++) {            

map_x.at(j,i) = static_cast(i);            

map_y.at(j,i) = static_cast(im.rows - j);

}

}

remap(im, dstImage, map_x, map_y, INTER_LINEAR);

self.secondImageView.image = MatToUIImage(dstImage);

效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值