Opencv remap函数

  • 函数签名
  • 实例
  • 应用
    • 亚像素信息
    • 扭曲特效

函数签名

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

将通用几何变换应用于图像。dst的尺寸应当应当和map1map2一致,而dst的数据类型则应同src一致。

map1以及map2共同表征了映射方式,代表dst的某个像素值来自于src中的哪一个点。也就是说,dst的每个像素的值都可以从src中某个位置得到,计算方式则如下:

dst(x,y) = src(map1(x, y), map2(x, y));

由于计算的取值位置(map1(x, y), map2(x, y))可能为非整数,需要在src中通过某种插值方式interpolation插值计算得到这一点的像素值。

borderMode——未定义的像素如何填充,类似于卷积时怎么补充边界。
可用的interpolation以及borderMode方式可查阅官网文档。

实例

int remap_test()
{// 映射关系,简单的平移{Mat srcImage;srcImage = imread("ying.png", 1);//resize(srcImage, srcImage, Size(srcImage.cols / 2, srcImage.rows / 2));Mat dstImage;Mat map_x, map_y;float shift_x = 250.5, shift_y = 150.7;int dst_w = 400, dst_h = 300;Rect dstROI(shift_x, shift_y, dst_w, dst_h);std::vector<float> t_x, t_y;int w = 0, h = 0;for (int w = 0; w < dst_w; w++) {t_x.push_back(static_cast<float>(w + shift_x));}for (int h = 0; h < dst_h; h++) {t_y.push_back(static_cast<float>(h + shift_y));}cout << "tx: " << t_x.size() << " ty: " << t_y.size() << endl;cv::repeat(cv::Mat(t_x).t(), t_y.size(), 1, map_x);cv::repeat(cv::Mat(t_y), 1, t_x.size(), map_y);remap(srcImage, dstImage, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(40, 40, 40));rectangle(srcImage, dstROI, Scalar(0, 0, 255));imshow("src", srcImage);imshow("remap result", dstImage);waitKey(0);}// 波纹效果{Mat srcImage;srcImage = imread("ying.png", 1);resize(srcImage, srcImage, Size(srcImage.cols / 2, srcImage.rows / 2));Mat dstImage;Mat map_x, map_y;map_x.create(srcImage.size(), CV_32FC1);map_y.create(map_x.size(), CV_32FC1);dstImage.create(map_x.size(), srcImage.type());for (int j = 0; j < srcImage.rows; j++){for (int i = 0; i < srcImage.cols; i++){//改变map_x & map_y的值.map_x.at<float>(j, i) = static_cast<float>(i + 5 * cos(j / 10.f));map_y.at<float>(j, i) = static_cast<float>(j);}}remap(srcImage, dstImage, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(255, 0, 0));imshow("src", srcImage);imshow("remap result", dstImage);waitKey(0);}return 0;
}


可以看到新图片的第一个像素来自原图的红色标记处(shift_x = 250, shift_y = 150),而超出原图区域的像素,由于BORDER_CONSTANT被指定为设定的值。

应用

亚像素信息

如例子1所示,通过插值获取图像区域中非整数位置的像素信息,也就是某些场景中所谓的亚像素信息。

扭曲特效

如例子2所示,可以实现对图像的扭曲效果,哈哈镜、波纹、乃至更加复杂的效果都可以通过调整映射矩阵的方式实现。

Opencv remap函数相关推荐

  1. OpenCV每日函数 几何图像变换模块 (8) remap函数

    一.概述 对图像应用通用几何变换.函数 remap 使用指定的映射转换源图像: 其中具有非整数坐标的像素值是使用一种可用的插值方法计算的. mapx 和 mapy 可以分别编码为 map1 和 map ...

  2. OpenCV图像处理——重映射 remap函数

    在<学习OpenCV3,O'Reilly系列丛书>中的第11章常见的图像变换中讲到的"任意映射",Remap函数.函数cv::remap通常用来纠正校准的立体图像,包括 ...

  3. opencv Remap 图像的映射

    重映射是什么意思? 把一个图像中一个位置的像素放置到另一个图片指定位置的过程. 为了完成映射过程, 有必要获得一些插值为非整数像素坐标,因为源图像与目标图像的像素坐标不是一一对应的. 我们通过重映射来 ...

  4. OpenCV每日函数 专栏简述(陆续整理中)

    一.OpenCV概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库.OpenCV库拥有超过 2500 种优化算法,其中包 ...

  5. opencv Mat 函数--CheckVector

    学习opencv ,我们需要对opencv的函数有点了解 ,实现什么样子的功能,以及如何实现 下面我们一次来看checkVector 这个函数, int org.opencv.core.Mat.che ...

  6. matlab中imresize函数的用法,为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同

    为何 MATLAB imresize 函数和 OpenCV resize 函数结果不同?今年 4 月,我在依照 MATLAB 代码自己写一个卷积神经网络 C++ 实现的过程中,就发现了这个问题,不过那 ...

  7. OpenCV findContours函数参数

    目录 OpenCV findContours函数参数 python检测外轮廓: c++轮廓检测: 一.mode取值"CV_RETR_EXTERNAL",method取值" ...

  8. 利用OpenCV的函数cvtcolor()进行颜色空间转换时需要注意的地方

    OpenCV的函数cvtcolor()的原型如下: C++原型: void cv::cvtColor(InputArray src,OutputArray dst,int code,int dstCn ...

  9. OpenCV使用函数compareHist的实例(附完整代码)

    OpenCV使用函数compareHist的实例 OpenCV使用函数compareHist的实例 OpenCV使用函数compareHist的实例 #include "opencv2/im ...

最新文章

  1. 什么?我要对AI礼貌?人机交互面临的道德漏洞
  2. 微服务治理实践:服务查询
  3. 计算程序运行时间(.net1.1 于.net2.0的区别)在.net2.0中提供了Stopwatch类,简单例子...
  4. shiro基于url权限认证时doGetAuthorizationInfo方法不运行的解决办法
  5. boost::hana::drop_while用法的测试程序
  6. jQuery ajax - ajax()
  7. [转] 常见WinCE启动失败原因分析
  8. yaml for java_细数Java项目中用过的配置文件(YAML篇)
  9. @Value与@ConfigurationProperties注解的讲解与区别
  10. Git安装配置与GitHub注册及简单使用
  11. mysql的模拟数据,员工的模拟数据,sql语句的应用,粘贴即用
  12. w10计算机用户名密码忘了,电脑w10系统开机密码忘了
  13. ps编辑工具:渐隐/合并拷贝
  14. 流程:论文发表的流程
  15. MIDIPLUS/迷笛studio m pro 2 valve声卡安装调试教程
  16. 虚拟服务器共享文件夹禁用,虚拟机共享文件夹禁用,vm虚拟机共享文件夹
  17. 在浏览器中嵌入播放器
  18. android在google map上画出导航路线图
  19. 《你拥有的最宝贵的财富是什么》作业
  20. leetcode98.验证二叉搜索树 Python

热门文章

  1. Win10(64位)系统清除BIOS密码的方法
  2. Lintcode:报数
  3. 如何从Gitlab上拉取代码
  4. 使用阿里云服务器三分钟搭建网站
  5. 王选: 从Dijkstra谈帅才的洞察力
  6. OpenCV每日函数 thinning函数(细化)
  7. 入侵检测系统 FAQ
  8. 不知道照片如何拼图?这3个方法能帮上你
  9. 北邮计算机通信网第一阶段作业,北邮计算机通信网阶段作业.doc
  10. 【GTASA】路人PED替换语音教程