java图像的平移等
我们也可以采用缓冲区来对图像进行处理。
在JAVA2D中图像处理模型是即时模式。
利用即时模式图像处理模型可以在内存中存储固定分辨率的图像,也可以对图像数据进行过滤处理。
JAVA2D在图像处理方面提供一对接口:
实现这两个接口的类包括:
他们用来定义缓冲区图像和光栅图像的操作。
也可以产生几何变换,钝化,锐化,增强对比,阀值,和图像颜色校正等图像处理效果。
如何使用缓冲区:
PS:im是某个Image的引用
1)创建。
还有三种不同的构造器。参看文档。
2)缓冲区上绘图。
先返回图像的上下文:
利用这个对象将欲绘制的图像送入缓冲区。
3)显示缓冲区图像,利用Graphics2D 的drawImage方法将缓冲区图像绘制到屏幕上。
比如在JPanel的paintComponent() 方法当中
下面步骤分析我总是假设人们需要在一个显示面板上显示,所以最后都加入了一个repaint();步骤
思路:
1)创建RescaleFactor和Offsets,他们可以是float型,也可以是float类型的数组。
2)创建RescaleOp对象。
RescaleOp rescale=new RescaleOp(scaleFactor,offset,null);
3)将过滤应用于缓冲rescale.filter(bi,bi);
4)repaint();
1)创建色彩空间对象.
ColorSpace cs=ColorSpace.getInstance(ColorSpace.CS_GRAY);
2)创建颜色过滤器
ColorConvertOp op=new ColorConvertOp(cs,null);
3)将过滤应用于缓冲op.filter(bi,bi);
4)repaint();
1)创建float类型的数组,不同的数组决定了不同的处理功能。
//下面可以达到锐化效果
float data[]={-1.0f,-1.0f,-1.0f,-1.0f,9.0f,-1.0f,-1.0f,-1.0f,-1.0f,}
//下面可以达到雾化效果
float data[]={1.0f/9.0f,1.0f/10.0f,1.0f/9.0f,1.0f/12.0f,1.0f/10.0f,1.0f/9.0f,1.0f/9.0f,1.0f/10.0f,1.0f/9.0f,}
//下面可以达到边缘化效果
float data[]={0.0f,1.0f,0.0f, -1.0f,4.0f,-1.0f , 0.0f,-1.0f,0.0f}
2)创建卷积核对像_前两个参数表明宽度和高度。
Kernel kernel=new Kernel(3,3,data);
3)创建卷积过滤器实例n ConvolveOp convolve=new Convolve(kernel,Convolve.EDGE_NO_OP,null);
4)将过滤应用于缓冲convolve.filter(bisrc,bidest);
5)repaint();
对缓冲区图像进行缩放,拉伸,平移,旋转,等等。
1)定义仿射变换:AffineTransform类对象
:AffineTransform transform =new AffineTransform();
2)对仿射变换对象进行设置变换,包括缩放,平移,拉伸,旋转等等。
transform.setToScale(double x,double y);//缩放
transform.setToShear(double x,double y);//平移
transform.setToTranslation(double x,double y);//拉伸
transform.setToRotation(double x,double y);//旋转
3)根据仿射变换过滤器创建过滤器对象
AffineTransformOp op=new AffineTransformOp(transform,null);
4)将过滤应用于缓冲op.filter(bisrc,bidest);
5)repaint();
在JAVA2D中图像处理模型是即时模式。
利用即时模式图像处理模型可以在内存中存储固定分辨率的图像,也可以对图像数据进行过滤处理。
JAVA2D在图像处理方面提供一对接口:
1 |
BufferedImageOp和RasterOp。 |
实现这两个接口的类包括:
1 |
AffineTransformOp, BandCombineOp, ColorConvertOp, ConvolveOp, LookupOp和RescaleOp等等 |
他们用来定义缓冲区图像和光栅图像的操作。
也可以产生几何变换,钝化,锐化,增强对比,阀值,和图像颜色校正等图像处理效果。
如何使用缓冲区:
PS:im是某个Image的引用
1)创建。
1 |
BufferedImage bi= new BufferedImage(getWidth(),getHight(),BufferedImage.TYPE_INT_ARGB); |
还有三种不同的构造器。参看文档。
2)缓冲区上绘图。
先返回图像的上下文:
1 |
Graphics2D big=bi.creatGraphics(); |
利用这个对象将欲绘制的图像送入缓冲区。
1 |
big.drawImage(im,0,0,this); |
3)显示缓冲区图像,利用Graphics2D 的drawImage方法将缓冲区图像绘制到屏幕上。
比如在JPanel的paintComponent() 方法当中
1 |
Graphics2D g2D=(Grahpics2D)g; g2D.drawImage(bi,0,0,this); |
下面步骤分析我总是假设人们需要在一个显示面板上显示,所以最后都加入了一个repaint();步骤
1 |
查找表过滤器: LookupOp:rgba四个参数进行修改。 |
1 |
RescaleOp:重调过滤器:类似前者。 |
思路:
1)创建RescaleFactor和Offsets,他们可以是float型,也可以是float类型的数组。
2)创建RescaleOp对象。
RescaleOp rescale=new RescaleOp(scaleFactor,offset,null);
3)将过滤应用于缓冲rescale.filter(bi,bi);
4)repaint();
1 |
ColorConvertOp色彩转换过滤——灰度<->彩色 |
1)创建色彩空间对象.
ColorSpace cs=ColorSpace.getInstance(ColorSpace.CS_GRAY);
2)创建颜色过滤器
ColorConvertOp op=new ColorConvertOp(cs,null);
3)将过滤应用于缓冲op.filter(bi,bi);
4)repaint();
1 |
ConvolveOp卷积过滤实例 |
1)创建float类型的数组,不同的数组决定了不同的处理功能。
//下面可以达到锐化效果
float data[]={-1.0f,-1.0f,-1.0f,-1.0f,9.0f,-1.0f,-1.0f,-1.0f,-1.0f,}
//下面可以达到雾化效果
float data[]={1.0f/9.0f,1.0f/10.0f,1.0f/9.0f,1.0f/12.0f,1.0f/10.0f,1.0f/9.0f,1.0f/9.0f,1.0f/10.0f,1.0f/9.0f,}
//下面可以达到边缘化效果
float data[]={0.0f,1.0f,0.0f, -1.0f,4.0f,-1.0f , 0.0f,-1.0f,0.0f}
2)创建卷积核对像_前两个参数表明宽度和高度。
Kernel kernel=new Kernel(3,3,data);
3)创建卷积过滤器实例n ConvolveOp convolve=new Convolve(kernel,Convolve.EDGE_NO_OP,null);
4)将过滤应用于缓冲convolve.filter(bisrc,bidest);
5)repaint();
1 |
AffineTransform仿射变换: |
对缓冲区图像进行缩放,拉伸,平移,旋转,等等。
1)定义仿射变换:AffineTransform类对象
:AffineTransform transform =new AffineTransform();
2)对仿射变换对象进行设置变换,包括缩放,平移,拉伸,旋转等等。
transform.setToScale(double x,double y);//缩放
transform.setToShear(double x,double y);//平移
transform.setToTranslation(double x,double y);//拉伸
transform.setToRotation(double x,double y);//旋转
3)根据仿射变换过滤器创建过滤器对象
AffineTransformOp op=new AffineTransformOp(transform,null);
4)将过滤应用于缓冲op.filter(bisrc,bidest);
5)repaint();