Обработка программирования среднего изображения - PullRequest
1 голос
/ 04 марта 2020

Я только начал учиться программировать в обработке, и сейчас я работаю с изображениями. Я пытаюсь загрузить изображение, а затем создать среднее изображение при нажатии клавиши «а». Я хочу, чтобы было рассчитано второе изображение, в котором все пиксели установлены на средний цвет исходного изображения по всем пикселям изображения. Здесь приведен код, но каждый раз, когда я нажимаю клавишу «а», я получаю сообщение об ошибке.

PImage inputimg = loadImage("dog.jpg");
boolean loadimg = false;

void setup() {
    size (400,400);
    background(255);
}

void draw() {
    image(inputimg,15,45);
}  

void keyPressed() {
    //for average color
    if(key == 'a' || key == 'A'){
        loadimg = true;
        inputimg.loadPixels();
        int red=0,green=0,blue=0;
        for(int i=0;i<inputimg.pixels.length;i++){
            color c = inputimg.pixels[i];
            red = red + (c >> 16) & 0xFF;
            green = green + (c >> 8) & 0xFF;
            blue = blue + (c >> 0) & 0xFF;
        }
        red = red / inputimg.pixels.length;
        green= green / inputimg.pixels.length;
        blue = blue / inputimg.pixels.length;

        inputimg.loadPixels();
        for(int i=0;i<height;i++){
            for(int j=0;j<width;j++){
                int update = j + i*width;
                pixels[update] = color(red,green,blue);
            }
        }
        updatePixels();
    }
}

1 Ответ

0 голосов
/ 04 марта 2020

PImage.loadPixels загружает пиксели в атрибут .pixel объекта PImage. Измените .pixel изображения и используйте PImage.updatePixels(), чтобы сохранить пиксель для изображения. например:

PImage inputimg;

void setup() {
    size (400,400);
    inputimg = loadImage("dog.jpg");
}

void draw() {
    background(255);
    image(inputimg, 15, 45);
}  

void keyPressed() {

    if (key == 'a' || key == 'A'){
        inputimg.loadPixels();
        int red=0, green=0, blue=0;
        for(int i=0; i<inputimg.pixels.length; i++){
            color c = inputimg.pixels[i];
            red += (c >> 16) & 0xFF;
            green += (c >> 8) & 0xFF;
            blue += (c >> 0) & 0xFF;
        }
        red /= inputimg.pixels.length;
        green /= inputimg.pixels.length;
        blue /= inputimg.pixels.length;

        for(int i=0;i<inputimg.pixels.length;i++){
            inputimg.pixels[i] = color(red,green,blue);
        }
        inputimg.updatePixels();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...