Java图像处理:灰度、二值化、浮雕、去色、反向、怀旧、放大镜等

本文介绍了Java中图像处理的一些基本操作,包括将图片转换为二维像素点数组,然后详细讲解了灰度转换、马赛克效果、油画风格、二值化处理、浮雕效果、反向色彩、去色处理以及怀旧滤镜和放大镜效果的实现方法。通过调整像素点的RGB值和应用特定算法,实现了各种图像特效。
摘要由CSDN通过智能技术生成

图像是由一个个像素点组合而成,图像处理本身实际上是遍历图像的像素点,对像素点的RGB值进行更改,以达到图像处理的目的。
接下来,我们主要介绍一下图片转化为二维像素点数组的方法以及部分图像处理如灰度、二值化、浮雕、去色的实现。

将图片转化为一个二维像素点数组

定义一个方法用来通过图片路径获得图片,并将其拆分为一个二维像素点数组,方便后续对像素点进行处理:

public int[][] getImagepix(String Path){
   
			
	    	File file = new File(Path);
			BufferedImage Buffimg = null;
			
			try {
   
				Buffimg=ImageIO.read(file);
			} catch (IOException e) {
   
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
			Buffimg.getHeight();
			Buffimg.getWidth();
			
			int num =Math.max(Buffimg.getWidth(), Buffimg.getHeight());
			
			int[][] imgdata = new int[num][num];
			for(int i=0;i<num;i++) {
   
				for(int j=0;j<num;j++) {
   
					if(i<Buffimg.getWidth()&&j<Buffimg.getHeight())
					imgdata[i][j]=Buffimg.getRGB(i, j);
					else imgdata[i][j]=0;
				}
			}
			return imgdata;
			
		}

灰度

灰度处理是通过转灰度的算法改变像素点的RGB值后进行绘制。
这里使用的RGB转灰度算法为Gray = R0.299 + G0.587 + B*0.114。

	    	Graphics bg = buffimg.getGraphics();

			int[][] imgdata= getImagepix(Path);
			
			for(int i=0;i<imgdata.length;i++) {
   
				for(int j=0;j<imgdata[i].length;j++) {
   
					Color color = new Color(imgdata[i][j]);
					
					int red = color.getRed();
					int blue = color.getBlue();
					int green = color.getGreen();
					
					int gray = (int) (0.299 * red + 0.587 * green + 0.114 * blue);
					Color newcolor = new Color(gray,gray,gray);
					bg.setColor(newcolor);
					bg.drawLine(i,j,i,j);
				}
			}
			bg.drawImage(buffimg,0,0,null);

灰度图像

马赛克

通俗来说,实现马赛克的方法就是如何将图像的一个像素点变成一个像素块,即将像素矩阵中的全部像素值统一修改为这个像素点矩阵中任意一个像素点值。本例中,我们将像素矩阵长度与宽度均设置为10,选取像素矩阵左上角的像素点值。

Graphics bg = buffimg.getGraphics();
	    	int[][] imgdata = getImagepix(Path);
	    	for(int i=0;i<imgdata.length;i=i+10) {
   
	    		for(int j=0;j<imgdata[i].length;j=j+10) {
   
	    		Color color = new Color(imgdata[i][j]);
	    		
	    		int red = color.getRed();
	    		int blue = color.getBlue();
				int green = color.getGreen();
				Color newcolor = new Color(red,green,blue);
				bg.setColor(newcolor);
				bg.fillRect(i,j,10,10);
				buffimg
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值