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



最近,我得到了一个练习,它要求我读取一个数据文件并使用它来生成彩色图像作为输出。现在,我得到了另一个练习,即将彩色图像转换为黑白草图。

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

//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。

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

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

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

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

附言这将是一个评论,但我没有足够的声誉。

最新更新