欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android下常用的图像处理程序(灰度化、线性灰度变化、二值化)

程序员文章站 2022-09-30 17:35:52
android下常用的图像处理程序(灰度化、线性灰度变化、二值化)。 1、图像灰度化: [java]view plaincopy publicbitmapbitmap2gray(bitmapbmsr...

android下常用的图像处理程序(灰度化、线性灰度变化、二值化)。

1、图像灰度化:

[java]view plaincopy

publicbitmapbitmap2gray(bitmapbmsrc){

//得到图片的长和宽

intwidth=bmsrc.getwidth();

intheight=bmsrc.getheight();

//创建目标灰度图像

bitmapbmpgray=null;

bmpgray=bitmap.createbitmap(width,height,bitmap.config.rgb_565);

//创建画布

canvasc=newcanvas(bmpgray);

paintpaint=newpaint();

colormatrixcm=newcolormatrix();

cm.setsaturation(0);

colormatrixcolorfilterf=newcolormatrixcolorfilter(cm);

paint.setcolorfilter(f);

c.drawbitmap(bmsrc,0,0,paint);

returnbmpgray;

}

2、对图像进行线性灰度变化

[java]view plaincopy

publicbitmaplinegrey(bitmapimage)

{

//得到图像的宽度和长度

intwidth=image.getwidth();

intheight=image.getheight();

//创建线性拉升灰度图像

bitmaplinegray=null;

linegray=image.copy(config.argb_8888,true);

//依次循环对图像的像素进行处理

for(inti=0;ifor(intj=0;j//得到每点的像素值

intcol=image.getpixel(i,j);

intalpha=col&0xff000000;

intred=(col&0x00ff0000)>>16;

intgreen=(col&0x0000ff00)>>8;

intblue=(col&0x000000ff);

//增加了图像的亮度

red=(int)(1.1*red+30);

green=(int)(1.1*green+30);

blue=(int)(1.1*blue+30);

//对图像像素越界进行处理

if(red>=255)

{

red=255;

}

 

if(green>=255){

green=255;

}

 

if(blue>=255){

blue=255;

}

//新的argb

intnewcolor=alpha|(red

linegray.setpixel(i,j,newcolor);

}

}

returnlinegray;

}

3、对图像进行二值化

[java]view plaincopy

//该函数实现对图像进行二值化处理

publicbitmapgray2binary(bitmapgraymap){

//得到图形的宽度和长度

intwidth=graymap.getwidth();

intheight=graymap.getheight();

//创建二值化图像

bitmapbinarymap=null;

binarymap=graymap.copy(config.argb_8888,true);

//依次循环,对图像的像素进行处理

for(inti=0;ifor(intj=0;j//得到当前像素的值

intcol=binarymap.getpixel(i,j);

//得到alpha通道的值

intalpha=col&0xff000000;

//得到图像的像素rgb的值

intred=(col&0x00ff0000)>>16;

intgreen=(col&0x0000ff00)>>8;

intblue=(col&0x000000ff);

//用公式x=0.3×r+0.59×g+0.11×b计算出x代替原来的rgb

intgray=(int)((float)red*0.3+(float)green*0.59+(float)blue*0.11);

//对图像进行二值化处理

if(gray<=95){

gray=0;

}else{

gray=255;

}

//新的argb

intnewcolor=alpha|(gray

binarymap.setpixel(i,j,newcolor);

}

}

returnbinarymap;

}