【问题标题】:Image converter java图像转换器java
【发布时间】:2013-04-19 02:12:08
【问题描述】:

我正在处理图像处理,我有一个问题。

我想从项目中读取图像,并将图像转换为灰色。 我目前正在尝试使用函数 rgb2gray 进行转换,但仍然无法正常工作。

import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.JFrame;

public class ImageTesting extends Component {
    private static int[] pixel;
    private static BufferedImage b;

    BufferedImage image;

    public void paint(Graphics g) {
        g.drawImage(image, 0, 0, null);
    }

    public ImageTesting() {
        try {
            image = ImageIO.read(new File("teste.jpg"));
        } catch (IOException e) {
        }
    }

    public Dimension getPreferredSize() {
        if (image == null) {
            return new Dimension(400, 400);
        } else {
            return new Dimension(image.getWidth(null), image.getHeight(null));
        }
    }

    public static BufferedImage rgb2gray(BufferedImage bi) {
        int heightLimit = bi.getHeight();
        int widthLimit = bi.getTileWidth();
        BufferedImage converted = new BufferedImage(widthLimit, heightLimit, BufferedImage.TYPE_BYTE_GRAY);
        for (int height = 0; height < heightLimit; height++) {
            for (int width = 0; width < widthLimit; width++) {
                Color c = new Color(bi.getRGB(width, height) & 0x00fffff);
                int newRed = (int) ((0.2989f * c.getRed()) * 2);// 0.2989f//multiplicr po 2
                int newGreen = (int) ((0.5870f * c.getGreen()) * 2);// 0.5870f
                int newBlue = (int) ((0.1140f * c.getBlue()) * 2);
                int roOffset = newRed + newGreen + newBlue;
                converted.setRGB(width, height, roOffset);
            }
        }
        return converted;
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        JFrame f = new JFrame("Load Image Sample");
        JFrame g = new JFrame("Image RGB");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        g.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        f.add(new ImageTesting());
        f.pack();
        f.setVisible(true);
        g.add(new ImageTesting());
        rgb2gray(b);
    }
}

当我运行程序时,这些是出现的错误。

如果有人可以帮助我,我很感激。 谢谢

编辑: 我设法解决了这个问题,但现在又出现了另一个问题。为了继续我的工作,我想在结果图像中找到最多 10 个亮点,并在索引中返回另一个值为 0 的黑色图像,在索引中返回值为 1 的白色图像,但此时我不明白制定这些步骤的最佳方法。

【问题讨论】:

  • “我有一个疑问” 为二手车推销员和政客的说法保留疑虑。如果您有问题,请提出(并称其为问题)。你有什么问题?
  • 你得到什么错误?
  • @AndrewThompson 我会保留对单词选择的批评。 OP 很可能不是以英语为母语的人,并且可能没有意识到“我有疑问”是一个不寻常的短语。
  • "这些是出现的错误" - 您忘记发布错误了吗?编辑您的帖子,添加错误消息。这样可以更轻松地帮助您修复它们。

标签: java bufferedimage


【解决方案1】:

main() 方法似乎有问题,不是吗?您创建两个完全相同的 JFrame 实例,然后添加显示原始图像的 Imagetesting 组件。最后运行 rgb2gray 时,结果无处发送。

【讨论】:

  • 这些错误是: imagetesting.ImageTesting.rgb2gray(ImageTesting.java:52) at imagetesting.ImageTesting.main(ImageTesting.java:91) 处的线程“main”中的异常 java.lang.NullPointerException
  • Dmitriy,我设法解决了这个问题。谢谢你的帮助。
【解决方案2】:

我建议使用图像过滤器,请在此处查看相关文档:http://www.jhlabs.com/ip/filters/

它高效且易于使用。

【讨论】:

    猜你喜欢
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2019-01-29
    • 1970-01-01
    相关资源
    最近更新 更多