【问题标题】:How do I loop through all the pixels in an image starting from the bottom?如何从底部开始循环遍历图像中的所有像素?
【发布时间】:2020-04-10 08:45:34
【问题描述】:

我正在尝试创建一个程序,该程序将检测蓝线并将其上方的所有像素涂黑,但下方不涂黑。参见下面的方法:

public static void findBlueLine(Picture p) {
Pixel[][] pixels = p.getPixels2D();
    for(int y = 0; y < p.getHeight(); y++) {
        for (int x = 0; x < p.getWidth(); x++) {
            if (isBlueLine(pixels[y][x])) {
                pixels[y][x].setColor(Color.BLACK);
                //for(int m = y; m < p.getHeight(); m++) {
                    //pixels[m][x].setColor(Color.BLACK);
                //}
            }
        }
    }
}

【问题讨论】:

  • 什么样的问题?你为什么要注释掉最里面的循环?
  • 回首往事,我弄清楚了为什么它不起作用,我正在研究一个项目,该项目将某个颜色线上方的所有像素(用于机器人的东西)涂黑并识别红球。我将盒子设置为蓝色,这样它就会检测到它并将整个屏幕变黑。改变了盒子的颜色,它的工作原理。大声笑。

标签: java loops image-processing iteration pixel


【解决方案1】:

我假设您的屏幕上有一条蓝线。这条蓝线可以是任何角度,并且可以在任何坐标处开始和结束。我假设屏幕上不存在这条线。

此代码应该适用于所有行。

public static void findBlueLine(Picture p) {
    Pixel[][] pixels = p.getPixels2D();
    Bool aboveLine = false;

    for (int x = 0; x < p.getWidth(); x++) {
        aboveLine = false;        

        for(int y = p.getHeight-1; 0 <= y ; y--) {
            if(aboveLine == true) {
                pixels[y][x].setColor(Color.BLACK);
            }

            if (isBlueLine(pixels[y][x])) {
                aboveLine = true;
            }  
        }

    }
}

【讨论】:

    猜你喜欢
    • 2013-07-16
    • 2011-12-06
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    相关资源
    最近更新 更多