最近,我接受了一项练习,要求我阅读一个数据文件并用它来生成彩色图像作为输出。现在,我接受了另一项练习,即将彩色图像转换为黑白素描。
以下代码是我为生成彩色图像而构建的代码
//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来查看他的结果。
他的图像应该生成一张大部分是白色的图片,但原始图片的颜色边界是黑色的。我尝试使用循环来做到但无济于事。关于如何做到这一点的任何解决方案?
答案 0 :(得分:0)
从代码中我可以看到,你正在加载一个图像并使其更大(在此过程中使用颜色映射)。但是从你的帖子看来,你需要找到轮廓并获得黑白图像。代码在哪里?你有什么尝试?你在说什么循环?
如果你想生成轮廓图像,我所知道的最简单的方法是使用Prewitt算子或Sobel算子。 http://en.wikipedia.org/wiki/Prewitt_operator
http://en.wikipedia.org/wiki/Sobel_operator
P.S。 这将是一个评论,但我没有足够的声誉。