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版)相关推荐

  1. Java算法:牛客网小米笔试真题算法Java版1-40题

    题号 题目 知识点 难度 通过率 XM1 小米Git 树 困难 10.22% XM2 懂二进制 中等 29.90% XM3 风口的猪-中国牛市 动态规划 较难 18.73% XM4 电话号码分身 中等 ...

  2. Java版人脸跟踪三部曲之三:编码实战

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos <Java版人脸跟踪三部曲>全文链接 &l ...

  3. 一款开源java版的视频管理系统!

    第一款面向大众的java版的视频管理系统.妖气山视频管理系统理论上可以制作任何类型的视频网站. 源码地址: 源码下载地址: https://gitee.com/javaex/yaoqishan 下面是 ...

  4. Java版人脸检测详解下篇:开发java应用并做成docker镜像

    本篇概览 如果您看过<Java版人脸检测上篇>一文,甚至动手实际操作过,那么你应该会对背后的技术细节感兴趣,开发这样一个应用,咱们总共要做以下三件事: 1.准备好docker基础镜像 2. ...

  5. Java版人脸检测详解下篇:编码

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 如果您看过<三分钟极速体验:Java版 ...

  6. Java版人脸跟踪三部曲之二:开发设计

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 本篇是<Java版人脸跟踪三部曲> ...

  7. hmcl离线登陆_最好用的Java版启动器HMCL

    原标题:最好用的Java版启动器HMCL 推荐的启动器是什么了?就是 Hello Minecraft! Launcher 简称HMCL,这款启动器特色很多.一张图片简单说明!!! 支持离线登录代表了什 ...

  8. Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版)

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...

  9. 分布式主键解决方案----Twitter 雪花算法的原理(Java 版)

    SnowFlake 雪花算法 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入 ...

  10. 我的世界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 ...

最新文章

  1. Centos+PHP模块+exif扩展 (第三方模块)
  2. vip能ping通,但80不通的解决方法
  3. AI在农业领域的应用落地!
  4. Git使用技巧(3)-- 远程操作
  5. 水稻已知os基因号,利用DAVIA进行GO功能富集分析
  6. 电大计算机考试题目excel,电大计算机考试复习题EXCEL部分
  7. [maven] springboot将jar包打包到指定目录
  8. MySQL中order by中关于NULL值的排序问题
  9. 【计算机网络复习】1.1.3 速率相关的性能指标
  10. c51两个定时器中断冲突_STM32定时器与中断整理
  11. IDEA下Springcloud框架搭建(一)之服务注册与发现
  12. HTML5之语义化标签
  13. MySQL常用函数之聚合函数
  14. android 导入 苹果手机,安卓手机文件怎么传到苹果手机
  15. selenium自动化测试登录qq空间遇到的错误
  16. 炫酷的2022网页特效网站源码
  17. 比赛竞猜投注类问题概率模型
  18. mysql 更新某个字段值_怎么对mysql数据表中的某个字段的所有数据修改
  19. 微信服务号开发说明:测试号申请、自定义菜单添加第三方连接
  20. 手机短号 (多实例)

热门文章

  1. CentOS 7安装gitlab服务器
  2. 2、使用rpm包安装grafana
  3. 第三单元man指令的简单运用
  4. 物联网是地产行业转型的有力推手
  5. network-manager
  6. apache日志设置方法:按时间、按大小记录
  7. JACK——AgentManual5 Events
  8. 03-获取 TargetUser 的 Followings 列表
  9. OCS2007R2部署之一软硬件环境准备
  10. CentOS Samba 服务器的构建(转)