最近在尝试着采用Java在图像处理领域实践一下常用的机器学习算法。首先涉及到的是如何将一副图片读取到一个像素矩阵中(Java中就是一维或二维数组中)。在实践过程中,通过测试代码,我发现基于BufferedImage可以有两种获取像素矩阵的方式,但需要注意像素点的保存顺序问题。

具体表现在:本例中的图片是一副彩色图片(博客头像),大小为425*292,即宽度(Width)为425,高度(Height)为292。

放上测试代码(刚测试完就放上来了,不要纠结细节),后面再说明:

/**

* Created by Song on 2016/12/29.

* 用于读取Image文件

*/

public final class ImgHandler {

public static void getData(String path){

try{

BufferedImage bimg = ImageIO.read(new File(path));

int [][] data = new int[bimg.getWidth()][bimg.getHeight()];

//方式一:通过getRGB()方式获得像素矩阵

//此方式为沿Height方向扫描

for(int i=0;i

在方式一中,getRGB()方法,根据手册,其返回的int型数据(32位)为ARGB格式,其中ARGB各占8bit。getRGB的两个参数x,y分别对应像素点的横纵坐标,但需注意的是,以图片左上角点为坐标原点,x轴正方向是沿着width方向的,y轴正方向是沿着Height方向的。不信的同学,可以试着把二者调换,就会发现系统会报数组溢出的异常。

在方式二中,像素会通过getPixels()方法被保存在一个一维数组中。其中temp数据为读取数据的缓冲区,其大小的确定一定要是其图像通道数(通过getNumBands()获得)的整数倍,例如这里的彩色图片有RGB三个通道,所以通道数就为3。在最终得到的结果一维数组中,一维数组的大小为Width*Height*NumBands。此处,一个像素点占三个位置(R,G,B),与方式一得到的值作比对时,才发现,这里的一维数组中,像素点的排列顺序是按着Width横向扫码得到的。

鉴于操作的便捷来说,个人肯定偏向于方向一,首先它把RGB值整合到了一起,不像方式二中是分开的三个int数,二是二维数组相较于一维数组,肯定更加接近矩阵的概念,便于运算。

java 像素矩阵_Java图片读取之BufferedImage得到像素矩阵的两种方式相关推荐

  1. springboot Java实现多文件的zip压缩操作 + 通过浏览器下载文件的两种方式

    注只适配utf-8的场景,待完善! 压缩为zip文件 通过java程序输出文件 /*** 功能:压缩多个文件成一个zip文件* @param srcfile:源文件列表* @param zipfile ...

  2. java匿名启动线程_使用匿名内部类:来创建线程的两种方式

    [Java]基础31:创建线程的两种方式 谢谢你的观看. 今天是我自学Java的第31天. 你的观看便是对我最大的鼓励. 话不多说,开始今天的学习: 线程的创建有两种方式,昨天学习过其中的一种: 创建 ...

  3. java字节流分为_Java的流操作分为字节流和字符流两种。

    Java的流操作分为字节流和字符流两种.           1. 字节流  所有的读操作都继承自一个公共超类java.io.InputStream类.  所有的写操作都继承自一个公共超类java.i ...

  4. java 登录过滤_Java 过滤器实现(登录) + 拦截器(两种方法)

    以下是实现未登录不能进入页面的实现 使用了thyemeleaf+SpringBoot+过滤器实现的,过滤器的核心代码如下: @Component @WebFilter(filterName= &quo ...

  5. Android点击图片随机,android 设置图片随机出现-两种方式

    android 设置图片随机出现-两种方式, 第一种方式:得到图片对应的Drawable实例,通过setImageDrawable(drawable)实现 //ImageView对应的id ivBg ...

  6. android 设置图片随机出现-两种方式

    android 设置图片随机出现-两种方式, 第一种方式:得到图片对应的Drawable实例,通过setImageDrawable(drawable)实现 //ImageView对应的idivBg = ...

  7. Hive元数据的读取的两种方式

    1.直连模式 使用JDBC的方式直接去mysql中读取元数据,称为直连模式 需要的条件: 连接Mysql的驱动,已经放入到$HIVE_HOME/lib下 创建连接时,需要有url,username,p ...

  8. java 读取css文件_java文件读取的两种方式

    JAVA中读取文件(二进制,字符)内容的几种方 JAVA中读取文件内容的方法有很多,比如按字节读取文件内容,按字符读取文件内容,按行读取文件内容,随机读取文件内容等方法,本文就以上方法的具体实现给出代 ...

  9. java木马_Java校验上传图片文件是否含有木马的两种方式

    这两天开发一个app遇到了上传文件的安全问题,在这里记录下来,弥补自己只有鱼的记忆的缺陷,也希望有人能够提供更好的思路去解决文件上传的安全问题. 下面这个类是文件上传的公共方法,ToolUtils判断 ...

最新文章

  1. AllowOverride以及Options相关指令
  2. 模块式lamp fpm式lamp
  3. python 复制文件夹内容 并结构一致_Python-移动和覆盖文件和文件夹
  4. csv转json文件
  5. 设计一个按优先数调度算法实现处理器调度的程序_计算机中的程序都是怎么运行的,来深入了解一下吧...
  6. Web Map Gis 开发系列索引
  7. PHP学习笔记【9】_表达式
  8. 四.激光SLAM框架学习之A-LOAM框架---项目工程代码介绍---2.scanRegistration.cpp--前端雷达处理和特征提取
  9. Google Play市场考察报告-2
  10. linux审计日志清除,Linux登录安全及用户操作审计 ,linux下清理日志脚本
  11. python数字求和为什么得不出结果_WPS表格求和问题,只出公式不出结果数字
  12. JasperServer 图表中文乱码解决
  13. android expandablelistview横向,Android 的ExpandableListView使用总结--二级展开树结构
  14. 机械零件设计手册_NASA Fastener Design Manual 紧固件设计手册 - 翻译 2/14
  15. 推荐10款实用必备的Windows10软件
  16. 优先队列(priority_queue)总结
  17. 智齿客服Android集成流程,智齿客服接入_智齿客服客服系统如何接入网站_智齿客服接入流程_企业服务汇...
  18. 基于javafx和mysql的C/S版影院管理系统
  19. Python Diary - Day 4 运算符
  20. vue3+element-plus 配套使用日期时间选择器默认英文修改为中文 完整引入和按需引入

热门文章

  1. Win软件 - (Net-Framework)已处理证书链,但是在不受信任提供程序信任的根证书中终止
  2. OpenMP与C++:事半功倍地获得多线程的好处(上)
  3. python3 比较列表_Python3列表(list)比较操作教程
  4. 大型工厂设备管理痛点和解决方案
  5. iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总,icloudpassbook...
  6. 如何提取音频从F4V
  7. 峰米V10、极米Rs Pro2及当贝X3 Pro究竟孰优孰劣?
  8. python基础list_python基础学习之列表list
  9. 斯坦福CS231n-2017春季课程全公开,视频+PPT+英文字幕
  10. 五行表格HTML代码,认识HTML表格元素