Atitit.遍历图像像素点rgb java attilax总结
Atitit.遍历图像像素点rgb java attilax总结
1. 遍历像素点 1
2. 提取一行 1
3. Rgb分量提取 2
4. 其他读取像素 3
5. --code 5
6. 参考 6
1. 遍历像素点
ImgxPicPhotoSplitor.java atibrow prj
public static boolean containsWhiteLine(BufferedImage image) {
int heit=image.getHeight();
for(int i=0;i<heit;i++)
{
PixLine pl=getPixLine(image, i);
if(isWhiteLine(pl))
return true;
}
return false;
}
2. 提取一行
这 个过程的下一步是用 Java 2D 绘制图像。首先取得它的 Graphics2D 上下文。可以用方法 createGraphics2D() 或者调用 getGraphics() 做到这一点。在这个上下文上绘制将会自动修改图像的像素数据。在绘制完成后,可以用方法 getRGB(int startX, int startY, int w, int h, int rgbArray, int offset, int scansize) 容易且高效地提取图像的像素值。这个方法可以将图像中矩形区域的像素数据传输到一个整数数组中。getRGB() 方法的参数如下:
startX, startY 是要提取的区域左上角图像的坐标
w, h 是要提取的区域的宽度和高度
rgbArray 是接收像素值的整数数组
offset 是数组中接收第一个像素值的位置的索引。
scansize 是图像中相邻两行中具有相同行索引的像素的索引偏移值。如果这个值与要提取的区域的宽度相同,那么一行的第一个像素就会存储在数组中前一行最后一个像素后 面的索引位置。如果这个值大于提取区域的宽度,那么数组中,在一行最后和下一行开始之间就会有一些未使用的索引。
走势这个getRGB 好像有问题,不会调用,查找资料也不行。自豪嘎子写蓝。。
public static PixLine getPixLine(BufferedImage image, int lineIndex) {
int[] pxs=new int[image.getWidth()];
for(int i=0;i<image.getWidth();i++)
{
pxs[i]=image.getRGB(i, lineIndex);
}
PixLine pl=new PixLine();
pl.pxs=pxs;
return pl;
}
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
3. Rgb分量提取
多谢sqcl的回答,还有一个问题,就是用BufferedImage.getRGB()返回的像素值是32位颜色值,要自己移位才能得到RBGA的各个分量值,有没有什么类可以配合BufferedImage直接取出某个像素的某个独立的分量值?
1 2 3 4 5 |
int pixel = 0xFF0000; Color pixelColor = new Color(pixel); int r = pixelColor.getRed(); int g = pixelColor.getGreen(); int b = pixelColor.getBlue(); |
不过,这样效率太低。用移位最好。如果觉得不方便,可以自己写个Helper类简单封装一下。
我们知道通过bufferedimage对象的getRGB(x,y)方法可以返回指定坐标的颜色int值 他可以通过
int R =(rgb & 0xff0000 ) >> 16 ;
int G= (rgb & 0xff00 ) >> 8 ;
int B= (rgb & 0xff );
转换成三个颜色分量
4. 其他读取像素
从BufferedImage对象中读取像素数据的代码如下:
[java] view plaincopy
1. int type= image.getType();
2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )
3. return (int [])image.getRaster().getDataElements(x, y, width, height, pixels );
4. else
5. return image.getRGB( x, y, width, height, pixels, 0, width );
[java] view plaincopy
1. int type= image.getType();
2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )
3. return (int [])image.getRaster().getDataElements(x, y, width, height, pixels );
4. else
5. return image.getRGB( x, y, width, height, pixels, 0, width );
首先获取图像类型,如果不是32位的INT型数据,直接读写RGB值即可,否则需要从Raster
对象中读取。
往BufferedImage对象中写入像素数据同样遵守上面的规则。代码如下:
[java] view plaincopy
1. int type= image.getType();
2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )
3. image.getRaster().setDataElements(x, y, width, height, pixels );
4. else
5. image.setRGB(x, y, width, height, pixels, 0, width );
[java] view plaincopy
1. int type= image.getType();
2. if ( type ==BufferedImage.TYPE_INT_ARGB || type == BufferedImage.TYPE_INT_RGB )
3. image.getRaster().setDataElements(x, y, width, height, pixels );
4. else
5. image.setRGB(x, y, width, height, pixels, 0, width );
读取图像可能因为图像文件比较大,需要一定时间的等待才可以,Java Advance Image
Processor API提供了MediaTracker对象来跟踪图像的加载,同步其它操作,使用方法如下:
[java] view plaincopy
1. MediaTracker tracker = new MediaTracker(this); //初始化对象
2. tracker.addImage(image_01, 1); // 加入要跟踪的BufferedImage对象image_001
3. tracker.waitForID(1, 10000) // 等待10秒,让iamge_01图像加载
[java] view plaincopy
1. MediaTracker tracker = new MediaTracker(this); //初始化对象
2. tracker.addImage(image_01, 1); // 加入要跟踪的BufferedImage对象image_001
3. tracker.waitForID(1, 10000) // 等待10秒,让iamge_01图像加载
从一个32位int型数据cARGB中读取图像RGB颜色值的代码如下:
[java] view plaincopy
1. int alpha = (cARGB >> 24)& 0xff; //透明度通道
2. int red = (cARGB >> 16) &0xff;
3. int green = (cARGB >> 8) &0xff;
4. int blue = cARGB & 0xff;
[java] view plaincopy
1. int alpha = (cARGB >> 24)& 0xff; //透明度通道
2. int red = (cARGB >> 16) &0xff;
3. int green = (cARGB >> 8) &0xff;
4. int blue = cARGB & 0xff;
将RGB颜色值写入成一个INT型数据cRGB的代码如下:
[java] view plaincopy
1. cRGB = (alpha << 24) | (red<< 16) | (green << 8) | blue;
[java] view plaincopy
1. cRGB = (alpha << 24) | (red<< 16) | (green << 8) | blue;
创建一个BufferedImage对象的代码如下:
[java] view plaincopy
1. BufferedImage image = newBufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
[java] view plaincopy
1. BufferedImage image = newBufferedImage(256, 256, BufferedImage.TYPE_INT_ARGB);
5. --code
ImgxPicPhotoSplitor.java atibrow prj
6. 参考
Java数字图像处理基础知识 - 必读 - 流浪的鱼 - 博客频道 - CSDN.NET.htm
Java数字图像处理基础知识 - 必读 - 流浪的鱼 - 博客频道 - CSDN.NET.html
Atitit.遍历图像像素点rgb java attilax总结相关推荐
- opencv 几种不同遍历图像像素的方法详解
简述 我们在图像处理时经常会用到遍历图像像素点的方式,同样是遍历图像像素点,共有很多中方法可以做到:在这些方法中,有相对高效的,也有低效的:不是说低效的方法就不好,不同场景使用不同方法. 方法 下面将 ...
- bmp 像素点 php,读取BMP图像每一像素点RGB数据 | 学步园
对于24位bmp图片,每一个像素点存放着此点的RGB值.首先定义一个结构体,包含红(red).绿(green).蓝(blue)这三个字段,如下: //像素颜色值 typedef struct tagP ...
- Atitit swt 4.3 4.4 4.5 新特性java attilax总结
Atitit swt 4.3 4.4 4.5 新特性java attilax总结 1.4.5 Release -June 3, 20151 1.1.Older Releases1 2.SWT 4.4. ...
- java 三原色_opencv3_java 提取图像的RGB三原色分割图像Split Core.split
提取图像的RGB三原色分割图像Split Core.split package opencv_java_demo; import java.util.List; import org.opencv.c ...
- 读取BMP图像每一像素点RGB数据
对于24位bmp图片,每一个像素点存放着此点的RGB值.首先定义一个结构体,包含红(red).绿(green).蓝(blue)这三个字段,如下: [html] view plaincopy //像素颜 ...
- OpenCV遍历图像性能比较、利用查找表
原文:http://blog.csdn.net/chenjiazhou12/article/details/21052849 对于如何扫描图像的方法实在是太多了,在浏览一些资料的时候也找到了一些好的方 ...
- 一条python语句实现BGR图像转RGB图像
为什么要将BGR图像转RGB图像,一个典型的应用场景是opencv的颜色通道顺序为[B,G,R],而matplotlib的颜色通道顺序为[R,G,B].所以当用opncv读取的图像最终用matplot ...
- atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97 1. 实现html5化界面的要解决的策略1 1.1. Js交互1 1.2. 动态参 ...
- Atitit 图像处理的心得与疑惑 attilax总结
Atitit 图像处理的心得与疑惑 attilax总结 1.1. 使用类库好不好??还是自己实现算法1 1.2. 但是,如果遇到类库体积太大,后者没有合适的算法,那就只能自己开发算法了1 1.3. 如 ...
最新文章
- 影像组学视频学习笔记[44(End)]-带95%置信区间的折线图、Li‘s have a solution and plan.
- 将万亿以下的阿拉伯数字转为中文金额
- python logging模块的作用及应用场景_Python常用模块功能简介(三)logging
- 分布式文件系统FastDFS设计原理
- unity3D-Gear VR字体由小变大效果
- (顺序表的应用5.4.2)POJ 1591 M*A*S*H(约瑟夫环问题的变形——变换步长值)
- vscode好用的扩展及常用的快捷键
- CentOS6.5 调整 /home 挂载 分区大小
- 怎么关闭计算机硬件加速,win7关闭硬件加速的方法,手把手抓图教你如何关闭硬件加速功能...
- 什么耳机适合华为手机?通话质量好的蓝牙耳机
- 使用Excel数据分析工具进行多元回归分析的方法
- 写文档时经常用到的图标(对勾、叉号)
- 移动端实现图标拖拽效果
- 创造与魔法怎么自建服务器,创造与魔法自建服攻略大全_创造与魔法自建服建造方法、福利_玩游戏网...
- 解决Skype一台电脑登陆多个账号的问题
- python画图解决Times New Roman自带粗体问题
- (转载)(官方)UE4--图像编程----着色器开发----HLSL 交叉编译器
- 天然肠衣数学建模matlab代码,数学建模天然肠衣搭配问题.doc
- 12864图片显示操作
- [python] 圆形嵌套图Circular Packing