Java 简单图像处理滤镜的实现

图像的表示

在计算机中,图像的显示是通过像素点来实现的,每个像素点可以说是一个小小的矩形,该矩形里面填充了一定的颜色。而图像就是将这些填充了颜色的矩形排列组合从而在计算机中显示出来的。

因此,在计算机中要表达一张图片,那么只需要知道每个像素点的位置及其填充的颜色即可。所以对于图像的储存,我们可以用一个二维数组表示,其下标表示像素点的位置,存储的内容为该像素点对应的颜色。

图像的绘制

首先我们要取得图片的数据并用一个二维数组表示,首先我们创建一个File类对象指向图片文件,简单的读取文件我们可以用ImageIO.read来实现,其返回值是一个BufferedImage类对象,所以我们创建相应对象来存放相应内容,相应操作如下:

File image = new File(FilePath);
BufferedImage buffImage = null;
try {
    buffImage = ImageIO.read(image);
} catch (IOException e) {
     e.printStackTrace();
}

其中文件路径可能错误或其他情况ImageIO.read可能会报异常,抛出异常即可。

BufferedImage类对象可以调用方法getRGB(int,int)获取对应像素点的RGB颜色值,其返回值是一个int类型数据,再通过BUufferedImage类的getWidth与getHight可以定义一个int类型的二维数组来储存图像内容。我们将其建成一个方法,具体实现如下:

public static int[][] getImage(String Path){
    File image = new File(Path);
    BufferedImage buffImage = null;
    try {
        buffImage = ImageIO.read(image);
    } catch (IOException e) {
         e.printStackTrace();
    }
    int[][] imageArr = new int[buffImage.getWidth()][buffImage.getHeight()];
    for (int i=0;i

取得了图像数据我们就能画出图像,我们先建立一个显示图像的窗口,然后循环画出每个像素点,像素点的绘制用Graphics类中的fillRect矩形填充方法即可。具体实现如下:

public class TextImage {

    public static void main(String[] args) {
        // 建立窗体
        JFrame imageFrame = new JFrame();
        imageFrame.setSize(new Dimension(700,700));
        imageFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        imageFrame.setLocationRelativeTo(null);
        imageFrame.setVisible(true);
        Graphics g = imageFrame.getGraphics();    // 获取画笔

        int[][] image = getImage("菜狗.jpg");     // 获取图像数据
        // 循环绘制图像
        for (int i=0;i

这样即可画出图像

Java 简单图像处理滤镜的实现_第1张图片

滤镜的实现就是通过对颜色的处理来实现的,例如令RGB三种颜色值相等所绘出的颜色是灰色,我们可以取其平均值然后赋给RGB。Color类有方法getRed、getGreen和getBlue分别获取对应颜色的RGB值,因此灰色滤镜可以通过如下处理:

public class TextImage {

    public static void main(String[] args) {
        // 建立窗体
        JFrame imageFrame = new JFrame();
        imageFrame.setSize(new Dimension(700,700));
        imageFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        imageFrame.setLocationRelativeTo(null);
        imageFrame.setVisible(true);
        Graphics g = imageFrame.getGraphics();    // 获取画笔

        int[][] image = getImage("菜狗.jpg");     // 获取图像数据
        // 循环绘制图像
        for (int i=0;i

 经过处理后图片效果如下

Java 简单图像处理滤镜的实现_第2张图片

同样的道理,通过对应的滤镜算法可以实现滤镜效果。 

你可能感兴趣的:(图像处理,java,计算机视觉)