【Java】图像处理基础(一):马赛克,二值化,边缘检测,融合,旋转,缩放

这篇博客介绍了Java图像处理的基本原理,包括像素的概念和图片数组表示。详细讲解了如何实现显示原图、马赛克效果、二值化处理、边缘检测、图片融合、旋转和缩放等操作,并提供了相应的代码示例和效果展示。
摘要由CSDN通过智能技术生成

基本原理

电脑中的图片,都是由像素点构成的,我们可以将图片理解为由像素组成的矩阵或二维数组,每个像素在矩阵中的位置,则表示了像素的位置信息。通常来说,一个像素点所包含A(透明度),R(红),G(绿),B(蓝)四个通道信息,在计算机中,R、G、B的取值范围为0~255,是1个Byte的大小,而int整型为4个Byte,正好可以储存一个像素点的四个通道信息,因此我们可以用1个int代表1个像素点。1个int中0-8位存B、8-16位存G、16-24位存R、24-32位存A。

	//我们可以通过在JFrame中画出500*500的随机颜色像素点图,体会图片在计算机中的表示原理
	@Override
	public void paint(Graphics g) {
   
		super.paint(g);		
		Random random = new Random();
		random.nextInt(256);
		int[][] imgdata = new int[500][500];
		for (int i = 0; i < 500; i++) {
   
			for (int j = 0; j < 500; j++) {
   
			//将R、G、B信息塞进Color中再get出来就可用一个int表示
			Color color =new Color(random.nextInt(256),random.nextInt(256),random.nextInt(256));
				imgdata[i][j]= color.getRGB();
				g.setColor(color);
				g.drawLine(i, j, i, j);
			}
		}
	}

显示原图

由于数组的纯粹性便于处理以及便于理解学习,考虑在获取图片时将BufferedImage转化为数组,以便在以后处理BufferedImage无法解决的问题

  • 代码

    • 获取图片
    //读取一张图片,将其中颜色信息保存
    public int[][] getImagePix(String pathName) {
         
    	File file = new File(pathName);
    	BufferedImage bufferedImage= null;
    	try {
         
    		bufferedImage = ImageIO.read(file);
    	} catch (IOException e) {
         
    		e.printStackTrace();
    	}
    	int h = bufferedImage.getHeight();
    	int w = bufferedImage.getWidth();
    	
    	int[][] imageData = new int[w][h];
    	for (int i = 0; i < imageData.length; i++) {
         
    		for (int j = 0; j < imageData[i].length; j++) {
         
    			imageData[i][j] = bufferedImage.getRGB(i, j);
    		}
    	}
    	return imageData;
    }
    
    • 显示图片
    /*
     * 二维数组显示原图
     */
    public BufferedImage drawImage(Graphics g,int[][] imageData){
         
    	BufferedImage bi = new BufferedImage(imageData.length, imageData[0].length, BufferedImage.TYPE_INT_ARGB);
    	for (int i = 0; i < imageData.length; i++) {
         
    		for (int j = 0; j < imageData[i].length; j++) {
         
    			bi.setRGB(i, j, imageData[i][j]);
    		}	
    	}
    	
    	g.drawImage(bi,50,80,null);
    	return bi;
    }
    
    /*
     * BufferedImage显示原图
     */
    public BufferedImage drawImage(Graphics g,BufferedImage bi){
         		
    	g.drawImage(bi,50,80,null);
    	return bi;
    }
    
  • 效果
    显示原图

马赛克效果

马赛克的本质就是图片颜色的稀释,常见的马赛克就是将图片划分成包含多余一个像素点的无数个小矩形,将其中1个像素点的RGB信息作为小矩形中所有点的RGB信息

  • 代码
    /*
     * 马赛克
     */
    public BufferedImage drawImage01(Graphics g
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值