Java 将图片转换为素描图

Java 将图片转换为素描图

        练习的时候突然想把自己几张照片处理为素描图,到网上查了一下没找到详细的Java实现代码。自己参考着http://sharehoo.cn/159058786244608.html这里的描述写了一下。

一、转换步骤

  1. 将RGB图转化为灰度图。
  2. 灰度图进行反色操作。
  3. 对步骤2中的图片进行高斯模糊。
  4. 将步骤1中的灰度图像和步骤三中的模糊反色图像混合。

二、准备

       使用的是开源的JH Labs库:http://www.jhlabs.com/ip/filters/index.html,Java使用的时候需要下载图像处理类,地址为:http://www.jhlabs.com/ip/filters/download.html

      点击下载后解压,导入项目,将其打包成jar包,这样在别的项目里也可以很方便的使用它。我使用的是eclipse工具:

项目导入后:

导成jar包:

右键build.xml  选择Run As  ,点击Ant build,成功之后的控制台:

生成的jar包:

到此为止,准备工作完成。

 

三、代码

   1.在pom.xml里导入生成的jar包:

    <dependency>
        <groupId>pictureFilter.filter</groupId>
        <artifactId>Filters</artifactId>
        <version>0.0.1</version>
    </dependency>

这里的groupId 和artifactId,version 根据自己的jar包的位置而定,我的jar包所在位置:

 2.图片转换为素描图的核心代码:

package com.fanwei;

import java.awt.CompositeContext;
import java.awt.image.BufferedImage;
import java.awt.image.WritableRaster;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import com.jhlabs.composite.ColorDodgeComposite;
import com.jhlabs.image.GaussianFilter;
import com.jhlabs.image.GrayscaleFilter;
import com.jhlabs.image.ImageUtils;
import com.jhlabs.image.InvertFilter;
import com.jhlabs.image.PointFilter;

/**
 * 图片处理为素描图
 * @author 范伟带你打天下
 */
public class  PictureTestDemo {

    public static void main(String[] args) throws IOException {
        BufferedImage src = null; 
        src=ImageIO.read(new File("D:\\test.jpg"));
        src = ImageUtils.convertImageToARGB(src); 
        
        //图像灰度化
        PointFilter grayScaleFilter = new GrayscaleFilter(); 
        BufferedImage grayScale = new BufferedImage(src.getWidth(),src.getHeight(),src.getType()); 
        grayScaleFilter.filter(src,grayScale); 
        //灰度图像反色
        BufferedImage inverted = new BufferedImage(src.getWidth(),src.getHeight(),src.getType()); 
        PointFilter invertFilter = new InvertFilter(); 
        invertFilter.filter(grayScale,inverted); 
        //高斯模糊处理
        GaussianFilter gaussianFilter = new GaussianFilter(20);
        BufferedImage gaussianFiltered = new BufferedImage(src.getWidth(),src.getHeight(),src.getType()); 
        gaussianFilter.filter(inverted,gaussianFiltered); 
        // 灰度图像和高斯模糊反向图混合
        ColorDodgeComposite cdc = new ColorDodgeComposite(1.0f); 
        CompositeContext cc = cdc.createContext(inverted.getColorModel(),grayScale.getColorModel(),null); 
        WritableRaster invertedR = gaussianFiltered.getRaster();
        WritableRaster grayScaleR = grayScale.getRaster(); 
        BufferedImage Composite=new BufferedImage(src.getWidth(),src.getHeight(),src.getType()); 
        WritableRaster colorDodgedR = Composite.getRaster(); 
        cc.compose(invertedR,grayScaleR,colorDodgedR); 
        //输出做好的素描
        File outputfile =new File("D:\\saved.png"); 
        ImageIO.write(Composite,"png",outputfile);
    }
}效果展示:

                                                                       

大功告成!


总结

JH Labs这个开源库里还有很多有意思的滤镜,使用起来也很简单,快去试试吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值