public int[] getPixels(Image img) { int w = img.getWidth(); int h = img.getHeight(); int[] pixels = new int[w * h]; img.getRGB(pixels, 0, w, 0, 0, w, h); return pixels; }
step 3.各种具体的图像处理算法实施 public Image imageToGray(Image src) { int srcW = src.getWidth(); int srcH = src.getHeight(); int[] srcPixels = getPixels(src); int r = 0; int g = 0; int b = 0; int a = 0; int argb; int temp;
for (int i = 0; i < srcH; i++) { for(int ii=0;ii<srcW;ii++) { argb = srcPixels[i*srcW+ii]; a = ((argb & 0xff000000) >> 24); // alpha channel r = ((argb & 0x00ff0000) >> 16); // red channel g = ((argb & 0x0000ff00) >> 8); // green channel b = (argb & 0x000000ff); // blue channel temp = (int)(.299*(double)r+.587*(double)g+.114*(double)b);
public Image edgeDetectByRobert(Image src){ int srcW = src.getWidth(); int srcH = src.getHeight(); int[] srcPixels = getPixels(src); int[] srcPixelsTemp = new int[srcW*srcH]; int r = 0; int g = 0; int b = 0; int a = 0; int argb,p0,p1,p2,p3; int temp=0xFF;
for (int i = 0; i < srcH-1; i++) { for(int ii=0;ii<srcW-1;ii++) {
p0 = srcPixels[i*srcW+ii]; a = ((p0 & 0x00ff0000) >> 16); p1=srcPixels[(i+1)*srcW+ii]; r = ((p1 & 0x00ff0000) >> 16); p2 = srcPixels[i*srcW+ii+1]; g = ((p2 & 0x00ff0000) >> 16); p3=srcPixels[(i+1)*srcW+ii+1]; b = ((p3 & 0x00ff0000) >> 16);
public Image imageToGray(Image src) { int srcW = src.getWidth(); int srcH = src.getHeight(); int[] srcPixels = getPixels(src); int r = 0; int g = 0; int b = 0; int a = 0; int argb; int temp;
for (int i = 0; i < srcH; i++) { for(int ii=0;ii<srcW;ii++) { argb = srcPixels[i*srcW+ii]; a = ((argb & 0xff000000) >> 24); // alpha channel r = ((argb & 0x00ff0000) >> 16); // red channel g = ((argb & 0x0000ff00) >> 8); // green channel b = (argb & 0x000000ff); // blue channel temp = (int)(.299*(double)r+.587*(double)g+.114*(double)b);
public Image edgeDetectBy4Neighborhood(Image src){ int srcW = src.getWidth(); int srcH = src.getHeight(); int[] srcPixels = getPixels(src); int[] srcPixelsTemp = new int[srcW*srcH]; int b = 0; int c = 0; int d = 0; int e = 0,a=0; int argb,p0,p1,p2,p3,p4; int temp=0xFF;
for (int i = 1; i < srcH-1; i++) { for(int ii=1;ii<srcW-1;ii++) {
p0 = srcPixels[i*srcW+ii]; a = ((p0 & 0x00ff0000) >> 16); p1=srcPixels[(i-1)*srcW+ii]; b = ((p1 & 0x00ff0000) >> 16); p2 = srcPixels[i*srcW+ii+1]; c = ((p2 & 0x00ff0000) >> 16); p3=srcPixels[(i+1)*srcW+ii]; d = ((p3 & 0x00ff0000) >> 16); p4=srcPixels[(i)*srcW+ii-1]; e = ((p4 & 0x00ff0000) >> 16); //对二值化后的图像进行类似于简笔画的生成 if(a==0&&(b==255||c==255||d==255||e==255)) argb=0; else argb=255;