android图像处理系统1.3

本文介绍了Android图像处理系统1.3的更新,主要利用Java的Matrix类进行图像处理。通过引入JAMA库,实现了矩阵的多种运算,将图像的RGB数据转换为Matrix,便于进行图像的翻转和其他算法操作。作者提供了源代码链接和关键函数的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                                                                   android图像处理系统1.3

最终版源代码:https://github.com/nuptboyzhb/AndroidImageProSystem
该版本由很大的更新。在处理图像的方式上,我引入了java中的矩阵类(Matrix)。该类由
http://math.nist.gov/javanumerics/jama/提供。实现了矩阵的加、减、乘、转置、矩阵的逆、范数、行列式等算法,并有多种构造函数和获得矩阵数据的方法。在图像处理系统1.3中,我们将图像的RGB数据保存为矩阵(Matrix),为后续的算法扩充打下了坚实的基础。我们在ImageProcess.java中引入包import Jama.Matrix;为了封装图像处理的过程,我们将获取RGB的模块分别封装成3个成员函数,将生成bitmap图像封装成函数makeToBitmap。并实现了图像翻转90度的算法。

@author:郑海波 2012-08-29 转载请声明:http://blog.youkuaiyun.com/nuptboyzhb/article/details/7925994

相关博客:http://blog.youkuaiyun.com/nuptboyzhb/article/details/7857366

                  http://blog.youkuaiyun.com/nuptboyzhb/article/details/7852999

[运行界面及效果]


获取RGB及灰度的代码:
[java]

private Matrix getDataR(int[] pix,int width,int height){
    	Matrix dataR=new Matrix(width,height,0.0);
    	// Apply pixel-by-pixel change
    	int index = 0;
    	for (int y = 0; y < height; y++)
    	{
    		for (int x = 0; x < width; x++)
    		{
    			int r = ((pix[index] >> 16) & 0xff);
      			dataR.set(x, y, r);
    			index++;
    		} // x
    	} // y
    	return dataR;
	}
	private Matrix getDataG(int[] pix,int width,int height){
    	Matrix dataG=new Matrix(width,height,0.0);
    	// Apply pixel-by-pixel change
    	int index = 0;
    	for (int y = 0; y < height; y++)
    	{
    		for (int x = 0; x < width; x++)
    		{
    			int g = ((pix[index] >> 8) & 0xff);
      			dataG.set(x, y, g);
    			index++;
    		} // x
    	} // y
    	return dataG;
	}
	private Matrix getDataB(int[] pix,int width,int height){
    	Matrix dataB=new Matrix(width,height,0.0);
    	// Apply pixel-by-pixel change
    	int index = 0;
    	for (int y = 0; y < height; y++)
    	{
    		for (int x = 0; x < width; x++)
    		{
    			int b =(pix[index] & 0xff);
      			dataB.set(x, y, b);
    			index++;
    		} // x
    	} // y
    	return dataB;
	}
	private Matrix getDataGray(int[] pix,int width,int height){
    	Matrix dataGray=new Matrix(width,height,0.0);
    	// Apply pixel-by-pixel change
    	int index = 0;
    	for (int y = 0; y < height; y++)
    	{
    		for (int x = 0; x < width; x++)
    		{
    			int r = ((pix[index] >> 16) & 0xff);
    			int g = ((pix[index] >> 8) & 0xff);
    			int b = (pix[index] & 0xff);
    			int gray=(int)(0.3*r+0.59*g+0.11*b);
      			dataGray.set(x, y, gray);
      			index++;
    		} // x
    	} // y
    	return dataGray;
	}



旋转90度的函数代码:
[java]

public Bitmap rotate90(Bitmap myBitmap) {
		// Create new array
    	int width = myBitmap.getWidth();
    	int height = myBitmap.getHeight();
    	int[] pix = new int[width * height];
    	myBitmap.getPixels(pix, 0, width, 0, 0, width, height);
    	Matrix dataR=getDataR(pix, width, height);
    	Matrix dataG=getDataG(pix, width, height);
    	Matrix dataB=getDataB(pix, width, height);
    	//Matrix dataGray=getDataGray(pix, width, height);
    	/////////////////////////////////////////////////////////
    	dataR=dataR.transpose();
    	dataG=dataG.transpose();
    	dataB=dataB.transpose();
    	///////////////////////////////////////////////////////////////
    	// Change bitmap to use new array
    	Bitmap bitmap=makeToBitmap(dataR, dataG, dataB, width, height);	
    	myBitmap = null;
    	pix = null;
    	return bitmap;
	}



封装makeToBitmap代码:
[java代码]

public Bitmap rotate90(Bitmap myBitmap) {
		// Create new array
    	int width = myBitmap.getWidth();
    	int height = myBitmap.getHeight();
    	int[] pix = new int[width * height];
    	myBitmap.getPixels(pix, 0, width, 0, 0, width, height);
    	Matrix dataR=getDataR(pix, width, height);
    	Matrix dataG=getDataG(pix, width, height);
    	Matrix dataB=getDataB(pix, width, height);
    	//Matrix dataGray=getDataGray(pix, width, height);
    	/////////////////////////////////////////////////////////
    	dataR=dataR.transpose();
    	dataG=dataG.transpose();
    	dataB=dataB.transpose();
    	///////////////////////////////////////////////////////////////
    	// Change bitmap to use new array
    	Bitmap bitmap=makeToBitmap(dataR, dataG, dataB, width, height);	
    	myBitmap = null;
    	pix = null;
    	return bitmap;
	}



 

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值