Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image processing 加工草图赢得';t在屏幕上显示修改后的图像_Image Processing_Processing - Fatal编程技术网

Image processing 加工草图赢得';t在屏幕上显示修改后的图像

Image processing 加工草图赢得';t在屏幕上显示修改后的图像,image-processing,processing,Image Processing,Processing,我正在做一个草图,它有以下功能: 调整大图像的大小,使其适合800 x 600屏幕 显示图像 按下键时应用一些效果 将图像重新显示在屏幕上,并打印一点Done消息 除了不能正确显示图像外,一切正常 以下是黑白效果: void blackAndWhite() { loadPixels(); for (int i = 0;i < img.pixels.length;i++) { int pixel = img.pixels[i]; // println("Workin

我正在做一个草图,它有以下功能:

  • 调整大图像的大小,使其适合
    800 x 600
    屏幕
  • 显示图像
  • 按下键时应用一些效果
  • 将图像重新显示在屏幕上,并打印一点
    Done
    消息
  • 除了不能正确显示图像外,一切正常

    以下是黑白效果:

    void blackAndWhite() {
      loadPixels();
      for (int i = 0;i < img.pixels.length;i++) {
        int pixel = img.pixels[i];
    
        // println("Working on pixel " + i + " out of " + img.pixels.length); 
    
        int red = (int) red(pixel);
        int green = (int) green(pixel);
        int blue = (int) blue(pixel);
    
        /*
         * Luminosity Method.
         */
        //      red = (int) (red * 0.21);
        //      green = (int) (green * 0.71);
        //      blue = (int) (blue * 0.07);
    
        /*
         * Average Method
         */
        //  float avg = (int) (red + green + blue / 3);
        //  red = green = blue = (int) avg;
    
        /*
         * Lightness Method
         */
        int mostProminent = max(red, green, blue);
        int leastProminent = min(red, green, blue);
        int avg = (int) ((mostProminent + leastProminent) / 2);
        red = green = blue = avg;
    
        pixel = color(red, green, blue);
        img.pixels[i] = pixel;
      }
      println("Done");
      updatePixels();
      image(img, WIDTH/2, HEIGHT/2, calculatedWidth, calculatedHeight);
    }  
    
    void blackAndWhite(){
    loadPixels();
    对于(int i=0;i
    但是,仅显示彩色图像:(
    我知道该算法有效,因为我在其他图像上尝试过(不使用此草图)。

    出了什么问题?

    以下代码工作正常:

    PImage img;
    
    void setup () {
      img = loadImage ("img.png");
      size(img.width, img.height);
    }
    
    void draw () {
      image(img, 0, 0);
    }
    
    void keyReleased () {
      blackAndWhite();
    }
    
    void blackAndWhite() {
    
      img.loadPixels();
      for (int i = 0;i < img.pixels.length;i++) {
        int pixel = img.pixels[i];
    
        // println("Working on pixel " + i + " out of " + img.pixels.length); 
    
        int red = (int) red(pixel);
        int green = (int) green(pixel);
        int blue = (int) blue(pixel);
    
        /*
         * Luminosity Method.
         */
        //      red = (int) (red * 0.21);
        //      green = (int) (green * 0.71);
        //      blue = (int) (blue * 0.07);
    
        /*
         * Average Method
         */
        //  float avg = (int) (red + green + blue / 3);
        //  red = green = blue = (int) avg;
    
        /*
         * Lightness Method
         */
        int mostProminent = max(red, green, blue);
        int leastProminent = min(red, green, blue);
        int avg = (int) ((mostProminent + leastProminent) / 2);
        red = green = blue = avg;
    
        pixel = color(red, green, blue);
        img.pixels[i] = pixel;
      }
      println("Done");
      img.updatePixels();
    } 
    
    PImage-img;
    无效设置(){
    img=loadImage(“img.png”);
    尺寸(最小宽度、最小高度);
    }
    无效提款(){
    图像(img,0,0);
    }
    无效键已释放(){
    黑白();
    }
    无效黑白(){
    img.loadPixels();
    对于(int i=0;i

    我的猜测是,您要么忘了编写img.loadPixels()而不是loadPixels(),要么是sketch的draw()中出现了错误方法。

    不确定这是否有区别,但将变量red、green和blue与函数red、green和blue同名是否安全/合理?@Zaphod Yeh。这很好。我在另一个草图中尝试过这个算法,效果很好:)如果我在
    设置()
    中调用
    黑白
    ,我会得到一个新图像。只是不是从按下的
    键开始
    仅仅
    loadPixels()
    做什么?函数loadPixels()调用草图窗口的1d像素颜色值数组。草图称为窗口像素,但随后使用点运算符img.someMethod()访问图像像素。基本上,您加载了窗口的像素,但随后编写了修改卸载图像像素的指令。