实验二:百度图像增强与特效SDK实验

package org.example;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import javax.imageio.ImageIO;
import javax.swing.filechooser.FileNameExtensionFilter;

public class BaiduImageGUI extends JFrame {

private JLabel originalLabel;
private JLabel enhancedLabel;
private JButton selectButton;
private JButton enhanceButton;

public BaiduImageGUI() {
setTitle("BaiduImageGUI");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
gbc.fill = GridBagConstraints.HORIZONTAL;

// Original image panel
JPanel originalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
originalLabel = new JLabel("Select an original image", SwingConstants.CENTER);
originalLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
originalPanel.add(originalLabel);
gbc.gridx = 0;
gbc.gridy = 0;
add(originalPanel, gbc);

// Enhanced image panel
JPanel enhancedPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
enhancedLabel = new JLabel("Enhanced image will appear here", SwingConstants.CENTER);
enhancedLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
enhancedPanel.add(enhancedLabel);
gbc.gridx = 1;
gbc.gridy = 0;
add(enhancedPanel, gbc);

// Button panel
JPanel buttonPanel = new JPanel();
selectButton = new JButton("选择图片");
enhanceButton = new JButton("网络优化");
buttonPanel.add(selectButton);
buttonPanel.add(enhanceButton);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 2; // Span both columns for the button panel
add(buttonPanel, gbc);

// Action listeners
selectButton.addActionListener(this::selectImage);
enhanceButton.addActionListener(this::enhanceImage);

setVisible(true);
}

private void selectImage(ActionEvent event) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Image files", ImageIO.getWriterFileSuffixes()));
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
try {
ImageIcon imageIcon = new ImageIcon(fileChooser.getSelectedFile().getAbsolutePath());
originalLabel.setIcon(imageIcon);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error loading image", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}

private void enhanceImage(ActionEvent event) {
try {
ImageIcon originalIcon = (ImageIcon) originalLabel.getIcon();
Image originalImage = originalIcon.getImage();
BufferedImage bufferedImage = new BufferedImage(originalImage.getWidth(null), originalImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.drawImage(originalImage, 0, 0, null);
g2d.dispose();

// Apply an enhancement filter (sharpening in this case)
bufferedImage = applySharpening(bufferedImage);

// Apply gray filter
bufferedImage = applyGrayFilter(bufferedImage);

ImageIcon enhancedIcon = new ImageIcon(bufferedImage);
enhancedLabel.setIcon(enhancedIcon);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error during image enhancement", "Error", JOptionPane.ERROR_MESSAGE);
}
}

private BufferedImage applySharpening(BufferedImage image) {
float[] sharpenArray = {
0, -1, 0,
-1, 5, -1,
0, -1, 0
};
Kernel sharpenKernel = new Kernel(3, 3, sharpenArray);
ConvolveOp convolveOp = new ConvolveOp(sharpenKernel);
BufferedImage sharpenedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
convolveOp.filter(image, sharpenedImage);
return sharpenedImage;
}

private BufferedImage applyGrayFilter(BufferedImage image) {
BufferedImage grayImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
Graphics g = grayImage.getGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
return grayImage;
}

public static void main(String[] args) {
        SwingUtilities.invokeLater(BaiduImageGUI::new);
}
}

 

package org.example;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import javax.imageio.ImageIO;
import javax.swing.filechooser.FileNameExtensionFilter;

public class ImageEnhancementGUI extends JFrame {

private JLabel originalLabel;
private JLabel enhancedLabel;
private JButton selectButton;
private JButton enhanceButton;

public ImageEnhancementGUI() {
setTitle("Image Enhancement GUI");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(800, 600);
setLayout(new GridBagLayout());
GridBagConstraints gbc = new GridBagConstraints();
gbc.insets = new Insets(10, 10, 10, 10);
gbc.fill = GridBagConstraints.HORIZONTAL;

// Original image panel
JPanel originalPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
originalLabel = new JLabel("Select an original image", SwingConstants.CENTER);
originalLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
originalPanel.add(originalLabel);
gbc.gridx = 0;
gbc.gridy = 0;
add(originalPanel, gbc);

// Enhanced image panel
JPanel enhancedPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
enhancedLabel = new JLabel("Enhanced image will appear here", SwingConstants.CENTER);
enhancedLabel.setBorder(BorderFactory.createLineBorder(Color.BLACK));
enhancedPanel.add(enhancedLabel);
gbc.gridx = 1;
gbc.gridy = 0;
add(enhancedPanel, gbc);

// Button panel
JPanel buttonPanel = new JPanel();
selectButton = new JButton("选择图片");
enhanceButton = new JButton("图像增强");
buttonPanel.add(selectButton);
buttonPanel.add(enhanceButton);
gbc.gridx = 0;
gbc.gridy = 1;
gbc.gridwidth = 2; // Span both columns for the button panel
add(buttonPanel, gbc);

// Action listeners
selectButton.addActionListener(this::selectImage);
enhanceButton.addActionListener(this::enhanceImage);

setVisible(true);
}

private void selectImage(ActionEvent event) {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setFileFilter(new FileNameExtensionFilter("Image files", ImageIO.getWriterFileSuffixes()));
int result = fileChooser.showOpenDialog(this);
if (result == JFileChooser.APPROVE_OPTION) {
try {
ImageIcon imageIcon = new ImageIcon(fileChooser.getSelectedFile().getAbsolutePath());
originalLabel.setIcon(imageIcon);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error loading image", "Error", JOptionPane.ERROR_MESSAGE);
}
}
}

private void enhanceImage(ActionEvent event) {
try {
ImageIcon originalIcon = (ImageIcon) originalLabel.getIcon();
Image originalImage = originalIcon.getImage();
BufferedImage bufferedImage = new BufferedImage(originalImage.getWidth(null), originalImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.drawImage(originalImage, 0, 0, null);
g2d.dispose();

// Apply an enhancement filter (sharpening in this case)
bufferedImage = applySharpening(bufferedImage);

ImageIcon enhancedIcon = new ImageIcon(bufferedImage);
enhancedLabel.setIcon(enhancedIcon);
} catch (Exception e) {
JOptionPane.showMessageDialog(this, "Error during image enhancement", "Error", JOptionPane.ERROR_MESSAGE);
}
}

private BufferedImage applySharpening(BufferedImage image) {
// Define the sharpening kernel
float[] sharpenArray = {
0, -1, 0,
-1, 5, -1,
0, -1, 0
};
Kernel sharpenKernel = new Kernel(3, 3, sharpenArray);

// Create the convolution operation
ConvolveOp convolveOp = new ConvolveOp(sharpenKernel);
BufferedImage sharpenedImage = new BufferedImage(image.getWidth(), image.getHeight(), BufferedImage.TYPE_INT_RGB);
convolveOp.filter(image, sharpenedImage);

return sharpenedImage;
}

public static void main(String[] args) {
SwingUtilities.invokeLater(ImageEnhancementGUI::new);
}
}

 

 

posted @   不会JAVA的小袁  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2023-11-22 66
点击右上角即可分享
微信分享提示