图像处理--获取灰度图和黑白图
2017-03-31 18:23
405 查看
转载自:http://blog.csdn.net/luoweifu/article/details/8042494,谢谢作者的分享,我摘抄了代码部分作为笔记
import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; public class HandlerImage { public static void main(String[] args) { // TODO Auto-generated method stub File srcFile = new File("D:/timg.jpg"); File desFile = new File("D:/des.jpg"); try { BufferedImage bufferedImage = ImageIO.read(srcFile); int width = bufferedImage.getWidth(); int height = bufferedImage.getHeight(); int startX = 0; int startY = 0; int offset = 0; int scansize = width; int[] rgbArray = bufferedImage.getRGB(startX, startY, width, height, null, offset, scansize); int[] resultArray = new int[rgbArray.length];//保存处理后的图像数据 Color c; int gray; for (int i = 0; i < height; i++) { for (int j = 0; j < width; j++) { c = new Color(rgbArray[i * width + j]); /*--------获取黑白图----------*/ gray = (int) (0.299 * c.getRed() + 0.578 * c.getGreen() + 0.114 * c.getBlue()); resultArray[i * width + j] = new Color(gray, gray, gray).getRGB(); /*----------------------------*/ /*--------获取R,G,B三种灰度图----------*/ //resultArray[i * width + j] = new Color(c.getRed(), 0, 0).getRGB(); //resultArray[i * width + j] = new Color(0, c.getGreen(), 0).getRGB(); //resultArray[i * width + j] = new Color(0, 0, c.getBlue()).getRGB(); /*-------------------------------------*/ } } FileOutputStream fileOutputStream = new FileOutputStream(desFile); BufferedImage imgOut = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR); imgOut.setRGB(startX, startY, width, height, resultArray, offset, scansize); ImageIO.write(imgOut, "jpg", fileOutputStream); fileOutputStream.flush(); fileOutputStream.close(); int imgType = bufferedImage.getType(); switch (imgType) { case BufferedImage.TYPE_3BYTE_BGR: System.out.println("-- TYPE_3BYTE_BGR --"); break; case BufferedImage.TYPE_4BYTE_ABGR: System.out.println("-- TYPE_4BYTE_ABGR --"); break; case BufferedImage.TYPE_4BYTE_ABGR_PRE: System.out.println("-- TYPE_4BYTE_ABGR_PRE --"); break; case BufferedImage.TYPE_BYTE_BINARY: System.out.println("-- TYPE_BYTE_BINARY --"); break; case BufferedImage.TYPE_BYTE_GRAY: System.out.println("-- TYPE_BYTE_GRAY --"); break; case BufferedImage.TYPE_BYTE_INDEXED: System.out.println("-- TYPE_BYTE_INDEXED --"); break; case BufferedImage.TYPE_CUSTOM: System.out.println("-- TYPE_CUSTOM --"); break; case BufferedImage.TYPE_INT_ARGB: System.out.println("-- TYPE_INT_ARGB --"); break; case BufferedImage.TYPE_INT_ARGB_PRE: System.out.println("-- TYPE_INT_ARGB_PRE --"); break; case BufferedImage.TYPE_INT_BGR: System.out.println("-- TYPE_INT_BGR --"); break; case BufferedImage.TYPE_INT_RGB: System.out.println("-- TYPE_INT_RGB --"); break; case BufferedImage.TYPE_USHORT_555_RGB: System.out.println("-- TYPE_USHORT_555_RGB --"); break; case BufferedImage.TYPE_USHORT_565_RGB: System.out.println("-- TYPE_USHORT_565_RGB --"); break; case BufferedImage.TYPE_USHORT_GRAY: System.out.println("-- TYPE_USHORT_GRAY --"); break; default: break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
相关文章推荐
- C#图像处理类(使用此类可实现生成锐化效果、黑白效果和灰度效果)
- VC获取AS3处理的图像
- 【转】C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- 数字图像处理_真彩图转换灰度图_纯C
- VB图像处理,(一)像素的获取和输出
- [学习日记]VB图像处理之像素的获取和输出
- OpenCV实现彩色图像转换为灰度图及二值化处理
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- C# 图像处理(二)—— 黑白效果
- c#图像处理入门(-bitmap类和图像像素值获取方法) .
- c#图像处理入门的一个好方法-bitmap类和图像像素值获取方法
- OpenCV处理kinect深度图,获取手掌骨架图像
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- arm摄像头获取jpeg图像后,从内存中解压jpeg图像,并用openCV处理
- Delphi图像处理 -- 获取窗口或设备的图像数据
- C#图像处理(各种旋转、改变大小、柔化、锐化、雾化、底片、浮雕、黑白、滤镜效果)
- [Mo]OpenNI+OpenCV处理kinect深度图,获取手掌骨架图像
- 高级图像处理初步——背景获取、轮廓检测、数量统计
- Delphi图像处理 -- 图像黑白调整