Java+opencv3.2.0实现重映射
时间:2019-04-13
本文章向大家介绍Java+opencv3.2.0实现重映射,主要包括Java+opencv3.2.0实现重映射使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通过重映射来表达每个像素的位置(x,y) :g(x,y)=f(h(x,y)),h(x,y)是映射方法函数。当h(x,y) = (I.cols()-x,y),表示按照x轴方向发生偏转。
函数:Imgproc.remap(Mat src, Mat dst, Mat map1, Mat map2, int interpolation, int borderMode, Scalar borderValue)
参数说明:
src:源图像
dst:目标图像
map1:它有两种可能表示的对象,一种是表示点(x,y)的第一个映射,另一种是CV_16SC2、CV_32FC1、CV_32FC2类型的X值
map2:它有两种可能表示的对象,一种是当map1表示点(x,y)的第一个映射时,不代表任何值,另一种是CV_16UC1、CV_32FC1类型的Y值
interpolation:插值方式,不支持INTER_AREA
borderMode:边界模式,默认BORDER_CONTANT
borderValue:当有常数边界时使用的值,默认为0
示例代码:
public static void main(String[] args) { System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat src = Imgcodecs.imread("F:\\t0105b07b97736d453d.jpg"); Mat dst = src.clone(); Mat map_x = new Mat(src.size(), CvType.CV_32FC1); Mat map_y = new Mat(src.size(), CvType.CV_32FC1); int key = 1; // key取值1、2、3、4 for (int i = 0; i < src.rows(); i++) { for (int j = 0; j < src.cols(); j++) { switch (key) { case 1: // 重映射1 if (j > src.cols() * 0.25 && j < src.cols() * 0.75 && i > src.rows() * 0.25 && i < src.rows() * 0.75) { map_x.put(i, j, 2 * (j - src.cols() * 0.25) + 0.5); map_y.put(i, j, 2 * (i - src.rows() * 0.25) + 0.5); } else { map_x.put(i, j, 0.0); map_y.put(i, j, 0.0); } break; case 2: // 重映射2 map_x.put(i, j, j); map_y.put(i, j, src.rows() - i); break; case 3: // 重映射3 map_x.put(i, j, src.cols() - j); map_y.put(i, j, i); break; case 4: // 重映射4 map_x.put(i, j, src.cols() - j); map_y.put(i, j, src.rows() - i); break; default: break; } } } Imgproc.remap(src, dst, map_x, map_y, Imgproc.INTER_LINEAR, Core.BORDER_CONSTANT, new Scalar(0, 0, 0)); Imgcodecs.imwrite("F:\\dst.jpg", dst); }
源图像:
第一种映射:
第二种映射:
第三种映射:
第四种映射:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
- Java工具类- 跨域工具类
- python语言中的AOP利器:装饰器
- 如何使用supervisor管理你的应用
- Manjaro安装配置
- [Golang软件推荐] Frp内网穿透
- [Golang软件推荐] Golang通用连接池
- RxJS -- Subscription
- ASP.Net Core项目在Mac上使用Entity Framework Core 2.0进行迁移可能会遇到的一个问题.
- RxJS速成 (下)
- RxJS速成 (上)
- Typescript 查缺补漏
- Git -- Stash
- Git -- Rebase
- Git -- 分支与合并 (命令行+可视化工具p4merge) Fast Forward 合并禁用 Fast Forward 合并自动合并解决合并的冲突
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 尤大 4 天前发在 GitHub 上的 vue-lit 是啥?
- 原创的20个Python自动化案例,一口一个,高效办公!
- 看完这篇Python操作PPT总结,从此使用Python玩转Office全家桶就没有压力了!
- 【Hadoop 分布式部署 三:基于Hadoop 2.x 伪分布式部署进行修改配置文件】
- DCL单例模式你不知道的秘密
- 《大话数据结构》队列的顺序存储和链式存储
- 《大话数据结构》栈的顺序存储及链式存储
- 《大话数据结构》之双向链表
- 《大话数据结构》线性表的链式存储结构
- 《大话数据结构》线性表的顺序存储结构
- 《啊哈算法》桶排序详解
- 你不得不知道的Git常用命令
- Java中静态代码块、代码块以及构造函数执行顺序详解
- 手写一个JDK1.7的简版HashMap
- MySQL存储过程创建与使用