现在的位置: 首页 > 综合 > 正文

android图像处理系统1.3

2013年05月18日 ⁄ 综合 ⁄ 共 3173字 ⁄ 字号 评论关闭

                                                                   android图像处理系统1.3

项目成品:手相评分:http://as.baidu.com/a/item?docid=2758385
该版本由很大的更新。在处理图像的方式上,我引入了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.csdn.net/nuptboyzhb/article/details/7925994

相关博客:http://blog.csdn.net/nuptboyzhb/article/details/7857366

                 

http://blog.csdn.net/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;
	}

 

抱歉!评论已关闭.