(JAVA)将彩色图像转换为黑白边框草图

时间:2014-11-19 20:15:39

标签: java

最近,我接受了一项练习,要求我阅读一个数据文件并用它来生成彩色图像作为输出。现在,我接受了另一项练习,即将彩色图像转换为黑白素描。

以下代码是我为生成彩色图像而构建的代码

//Setting the size of the graphics window
    final int WINDOW_DIMENSION = 200;
    final int SIZE_FACTOR = 3;
    EasyGraphics generate = new EasyGraphics(WINDOW_DIMENSION*SIZE_FACTOR,WINDOW_DIMENSION*SIZE_FACTOR);

    //Constructing the arrays
    char[][] firstArray = new char[WINDOW_DIMENSION][WINDOW_DIMENSION];
    char[] secondArray = scan.toCharArray();

    //Using "for" loop to generate 2D array
    int line = WINDOW_DIMENSION;
    int column = -1;

    for (int i = 0; i < WINDOW_DIMENSION*WINDOW_DIMENSION; i++) {
        column++;
        if (i%WINDOW_DIMENSION == 0) {
            line--;
            column = 0;
        }

        firstArray[column][line]=secondArray[i];
    }

    //Plotting the colours for respective range of numbers
    for (int a = 0; a < WINDOW_DIMENSION; a++) {
        for (int b = 0; b < WINDOW_DIMENSION; b++) {
            if (firstArray[a][b]=='0' || firstArray[a][b]=='1' || firstArray[a][b]=='2' || firstArray[a][b]=='3') {
                //Colour of background
                generate.setColor(66,167,243);
                for (int da=0; da<3; da++) {
                    for (int db=0; db<3; db++) {
                      generate.plot(a*3+da,b*3+db);
                    }
                }
            } 

            else if (firstArray[a][b]=='4' || firstArray[a][b]=='5') {
                //Colour of leaves
                generate.setColor(0,255,77);
                for (int da=0; da<3; da++) {
                    for (int db=0; db<3; db++) {
                      generate.plot(a*3+da,b*3+db);
                    }
                }
            } 

            else if (firstArray[a][b]=='6' || firstArray[a][b]=='7') {
                //Colour of ground
                generate.setColor(51,183,91);
                for (int da=0; da<3; da++) {
                    for (int db=0; db<3; db++) {
                      generate.plot(a*3+da,b*3+db);
                    }
                }
            } 

            else if (firstArray[a][b]=='8' || firstArray[a][b]=='9') {
                //Colour of tree trunk
                generate.setColor(102,51,0);
                for (int da=0; da<3; da++) {
                    for (int db=0; db<3; db++) {
                      generate.plot(a*3+da,b*3+db);
                    }
                }
            } 
        }
    }
}

我的朋友尝试了这项运动并且几乎完善了它。您可以通过查看给定的链接http://prntscr.com/57yi87来查看他的结果。

他的图像应该生成一张大部分是白色的图片,但原始图片的颜色边界是黑色的。我尝试使用循环来做到但无济于事。关于如何做到这一点的任何解决方案?

1 个答案:

答案 0 :(得分:0)

从代码中我可以看到,你正在加载一个图像并使其更大(在此过程中使用颜色映射)。但是从你的帖子看来,你需要找到轮廓并获得黑白图像。代码在哪里?你有什么尝试?你在说什么循环?

如果你想生成轮廓图像,我所知道的最简单的方法是使用Prewitt算子或Sobel算子。 http://en.wikipedia.org/wiki/Prewitt_operator

http://en.wikipedia.org/wiki/Sobel_operator

P.S。 这将是一个评论,但我没有足够的声誉。