入门级Mat (java版)
java
Mat可以保存图片。图片RGB-是三通道,所以Mat也包含了通道数。
列举最常见的一些方法
文章目录
- 创建
- 理解如何保存
- get
- put
- push_back
- reshape
- convertTo
创建
Mat mat = new Mat(3,2, CvType.CV_32SC3);
第一二个参数是行列数,第三个参数是mat的类型。这里32SC3表示一个像素用了32位,S代表signed int,C3代表通道数是3。
即 创建一个3X2的矩阵,此矩阵具有3通道。每个点能保存int类型数据
未带通道数的默认是1。例如,CV_8U就等同于CV_8UC1,CV_32S就等同于CV_32SC1。
更常用的是Mat mat = Imgcodecs.imread();
理解如何保存
这是我不理解的地方,着力于此
Mat mat = new Mat(3,2, CvType.CV_32SC3);System.out.println(mat.dump());//数据矩阵的所有元素
输出如下:
3行2列。2列就是红色矩形框。一行三个元素是因为三个通道。
详细看下面的代码。
Mat mat = new Mat(2, 2, CvType.CV_32SC3);int[] tep=new int[]{1,2,3,4,5,6,7,8,9,10,11,12};mat.put(0,0,tep); //按照顺序放System.out.println(mat.dump());ArrayList<Mat> channels = new ArrayList<>();Core.split(mat,channels);//split函数是分离channelSystem.out.println(channels.get(0).dump());int[] tmp=new int[3];mat.get(1,1,tmp);for (int i = 0; i <tmp.length; i++) {System.out.print(tmp[i]);}
可以看到,第一个channel里面的值是[1,4,7,10].
channels[0] =[ 1, 4;7, 10]channels[1] =[ 2, 5;8, 11]channels[2] =[ 3, 6;9, 12]
化成下图:颜色不同代表不同Channel
将三个颜色(犹如RGB)的数放在一起,不就是2行2列吗?
足以说明这样理解是没有错误的
Mat mat = new Mat(3,2, CvType.CV_32SC3,new Scalar(1,2,4));System.out.println(mat.dump());
下面均已这个例子举例。
get
get(行,列)或者get(行,列,数组)
注意这里的数组必须是channel的整数倍。
这样也说明,如果数组足够大,get(0,0,数组)足以获得所有元素
通俗来说:我从(0,0)开始获取元素,数组多大我就能得到多少元素
Mat mat = new Mat(3,2, CvType.CV_32SC3,new Scalar(1,2,4));System.out.println(mat.dump());System.out.println(mat.get(0,1)[0]);//第一行,第二列,通道1的元素:1System.out.println(mat.get(0,1)[1]);//第一行,第二列,通道2的元素:2System.out.println(mat.get(0,2)[0]);// 数组出界
put
放进去的数组大小需要是通道数的倍数。满足此前提下,会依次将数组里的元素放进矩阵里面。
能放多少放多少
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);Mat mat = new Mat(3,2, CvType.CV_32SC3,new Scalar(1,2,4));System.out.println(mat.dump());System.out.println(mat.get(0,1)[0]);System.out.println(mat.get(0,1)[1]);int[] am=new int[]{4,5,6};mat.put(1,1,am);System.out.println(mat.dump());System.out.println(mat.get(1,1)[1]);
push_back
新添加的Mat和原来的Mat,需要列数,通道数相同。
mat.push_back(new Mat(4,2,CvType.CV_32SC3,new Scalar(0,0,0)));System.out.println(mat.dump());
reshape
双参,第一个是通道数,第二个是行数。如果为0,新的矩阵和原矩阵的通道/行数相同。
无论怎么变,新矩阵的元素个数不变。
//reshapeMat a=mat.reshape(2,1);System.out.println(a.dump());System.out.println(a.rows());System.out.println(a.cols());System.out.println(a.channels());
convertTo
convertTo可以改变Mat的深度,例如可以把Mat的type从CV_8UC3改为CV_16SC3
convertTo不可以改变Mat的通道数,例如不可以把Mat的type从CV_8UC3改为CV_8UC1,即使你填入的转换类型通道数不同,输出的通道数还是与输入的通道数相同。(https://blog.csdn.net/a435262767/article/details/90522073)
可以先 reshape,改变通道数,再用convertTo改变深度
入门级Mat (java版)相关推荐
- Java算法:牛客网小米笔试真题算法Java版1-40题
题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 动态规划 较难 18.73% XM4 电话号码分身 中等 ...
- Java版人脸跟踪三部曲之三:编码实战
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos <Java版人脸跟踪三部曲>全文链接 &l ...
- 一款开源java版的视频管理系统!
第一款面向大众的java版的视频管理系统.妖气山视频管理系统理论上可以制作任何类型的视频网站. 源码地址: 源码下载地址: https://gitee.com/javaex/yaoqishan 下面是 ...
- Java版人脸检测详解下篇:开发java应用并做成docker镜像
本篇概览 如果您看过<Java版人脸检测上篇>一文,甚至动手实际操作过,那么你应该会对背后的技术细节感兴趣,开发这样一个应用,咱们总共要做以下三件事: 1.准备好docker基础镜像 2. ...
- Java版人脸检测详解下篇:编码
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 如果您看过<三分钟极速体验:Java版 ...
- Java版人脸跟踪三部曲之二:开发设计
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<Java版人脸跟踪三部曲> ...
- hmcl离线登陆_最好用的Java版启动器HMCL
原标题:最好用的Java版启动器HMCL 推荐的启动器是什么了?就是 Hello Minecraft! Launcher 简称HMCL,这款启动器特色很多.一张图片简单说明!!! 支持离线登录代表了什 ...
- Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版)
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...
- 分布式主键解决方案----Twitter 雪花算法的原理(Java 版)
SnowFlake 雪花算法 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入 ...
- 我的世界java下载1.13_Minecraft Java版 1.13.1-pre2 发布
Minecraft Java 版 1.13.1-pre2 发布 Back from vacation, we're now trying to finalize 1.13.1 and get it t ...
最新文章
- Centos+PHP模块+exif扩展 (第三方模块)
- vip能ping通,但80不通的解决方法
- AI在农业领域的应用落地!
- Git使用技巧(3)-- 远程操作
- 水稻已知os基因号,利用DAVIA进行GO功能富集分析
- 电大计算机考试题目excel,电大计算机考试复习题EXCEL部分
- [maven] springboot将jar包打包到指定目录
- MySQL中order by中关于NULL值的排序问题
- 【计算机网络复习】1.1.3 速率相关的性能指标
- c51两个定时器中断冲突_STM32定时器与中断整理
- IDEA下Springcloud框架搭建(一)之服务注册与发现
- HTML5之语义化标签
- MySQL常用函数之聚合函数
- android 导入 苹果手机,安卓手机文件怎么传到苹果手机
- selenium自动化测试登录qq空间遇到的错误
- 炫酷的2022网页特效网站源码
- 比赛竞猜投注类问题概率模型
- mysql 更新某个字段值_怎么对mysql数据表中的某个字段的所有数据修改
- 微信服务号开发说明:测试号申请、自定义菜单添加第三方连接
- 手机短号 (多实例)