package com.image.splice;
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.FileDialog;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.Panel;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
// TODO Auto-generated method stub
SpliceImageFrame frame = new SpliceImageFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
});
}
}
class SpliceImageFrame extends JFrame {
Image image1 = null;
Image image2 = null;
private static final int WIDTH = 500;
private static final int HEIGHT = 500;
public File loadImage() {
JFileChooser fileChooser = new JFileChooser();// 创建文件选择器
FileFilter filter = new FileNameExtensionFilter("Image(JPG/GIF/BMP)",
"JPG", "JPEG", "GIF", "BMP");// 创建过滤器
fileChooser.setFileFilter(filter);// 设置过滤器
int i = fileChooser.showOpenDialog(null);// 显示打开对话框
File imgFile = null;
if (i == JFileChooser.APPROVE_OPTION) {
imgFile = fileChooser.getSelectedFile(); // 获取选中图片的File对象
System.out.println(imgFile);
}
return imgFile;
}
public SpliceImageFrame() {
setSize(400, 300);
final ImagePanel imagePanel = new ImagePanel();
this.add(imagePanel);
Panel panel = new Panel();
this.add(panel, BorderLayout.SOUTH);
JButton imageOneButton = new JButton();
imageOneButton.setText("Image1");
panel.add(imageOneButton);
imageOneButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
File imageFile = loadImage();
Toolkit kit = Toolkit.getDefaultToolkit();
if (imageFile != null) {
try {
image1 = ImageIO.read(imageFile);// 构造BufferedImage对象
} catch (IOException ex) {
ex.printStackTrace();
}
}
imagePanel.repaint();
}
});
JButton imageTwoButton = new JButton();
imageTwoButton.setText("Image2");
panel.add(imageTwoButton);
imageTwoButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
File imageFile = loadImage();
Toolkit kit = Toolkit.getDefaultToolkit();
if (imageFile != null) {
try {
image2 = ImageIO.read(imageFile);// 构造BufferedImage对象
} catch (IOException ex) {
ex.printStackTrace();
}
}
imagePanel.repaint();
}
});
JButton spliceButton = new JButton();
spliceButton.setText("splice");
panel.add(spliceButton);
spliceButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
FileDialog dialog = new FileDialog(SpliceImageFrame.this,"保存");// 创建对话框
dialog.setMode(FileDialog.SAVE);// 设置对话框为保存对话框
dialog.setVisible(true);// 显示保存对话框
String path = dialog.getDirectory();// 获得文件的保存路径
String fileName = dialog.getFile();// 获得保存的文件名
// if (path == null || fileName == null){
// return;
// }
// String fileExtName = fileName.substring(fileName.indexOf(".")+1);// 文件扩展名,不含点
// String pathAndName = path + "\\" + fileName;// 文件的完整路径
// if (path == null || fileName == null) {
// return;
// }
// String fileExtName = fileName
// .substring(fileName.indexOf(".") + 1);// 文件扩展名,不含点
String pathAndName = path + "\\" + fileName+".jpg";// 文件的完整路径
BufferedImage bufferImage = new BufferedImage(WIDTH*2, HEIGHT,
BufferedImage.TYPE_INT_RGB);
Graphics g = bufferImage.getGraphics();// 获得绘图上下文对象
g.drawImage(image1, 0, 0, WIDTH, HEIGHT, null);
g.drawImage(image2, WIDTH, 0, WIDTH, HEIGHT, null);
try {
ImageIO.write(bufferImage, "jpg", new File(pathAndName));
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
});
}
private class ImagePanel extends Panel {
public ImagePanel() {
setSize(200, 100);
}
@Override
public void paint(Graphics g) {
// TODO Auto-generated method stub
g.drawImage(image1, 0, 0, 150, 200, null);
g.drawImage(image2, 150, 0, 150, 200, null);
}
}
}
分享到:
相关推荐
opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接opencv图片拼接...
2、实现拼接原图(即拿来拼接的图片)拖拽至拼接相框,松开鼠标后,点击“拼接”按钮,实现图片拼接; 已经实现把需要拼的图片放一起了,就不用考虑点击拼接,直接点另存,在里面拼接和另存功能。 以下布局图片拼...
图片拼接,也称为图像融合或全景摄影,是将多张图片合并成一张大图的过程,通常用于创建宽视角或全景图像。这一过程涉及图像对齐、重叠区域处理、透视校正等多个步骤。 在C#中使用OpenCV进行图片拼接,首先需要安装...
在本文中,我们将深入探讨C# Winform应用中实现图片剪切与拼接的技术细节,以及如何构建一个功能丰富的图片处理工具。标题“C# Winform图片剪切拼接终结版(多幅图片拼接、左右上下拼接)”表明这是一个针对C#开发者,...
在QT中,我们可以先创建一个足够大的空QImage对象,然后逐个将每张图片复制到这个大图的指定位置。这个过程涉及到图像的拷贝和坐标转换,以及对图片尺寸的精确控制。 横向拼接,即行拼接,是将图片在水平方向上组合...
在计算机视觉领域,图片拼接是一项常见的任务,用于将多张图像组合成一张全景图或者进行其他创意图像处理。OpenCV(开源计算机视觉库)是一个强大的工具,它提供了丰富的功能来处理图像和视频。OpenCVSharp是OpenCV...
在IT行业中,图片处理是一项常见的任务,而图片拼接则是其中一种常见的操作,它将多张图片合并成一张,常用于制作拼贴画、报告、海报等。在Windows平台上,利用GDI(Graphics Device Interface)图形设备接口可以...
2. **图像预处理**:这一步可能包括调整图片大小,使其具有相同的尺寸,或者进行直方图均衡化,以确保拼接后的图片色彩一致。 3. **特征匹配**:在每对相邻图片之间进行特征检测,找到共同的特征点。OpenCV库中的`...
比如拼接a,b两张图片,a图片包含内容m和n, b图片包含内容n和j,a和b图片有重叠内容为n,拼接成功后图片显示为m+n+j, 即只显示一次重叠部分。左右拼接后的图像宽度为a.width+b.width-offset,上下拼接后的图像高度...
【GDAL无缝图片拼接】 GDAL(Geospatial Data Abstraction Library)是一个开源的库,主要用于处理地理空间数据,包括栅格数据和矢量数据。这个强大的工具提供了丰富的功能,如读取、写入、转换和处理各种地理图像...
### 图片拼接技术概述 在图像处理领域中,图片拼接是一种常用的技术手段,它能够将多张图片按照特定的方式合并成一张完整的图像。这种技术广泛应用于虚拟现实、地图制作、全景摄影等多个领域。 ### 关键代码分析 ...
淘淘图片拼接之星是一款专业的将多张图片拼接成一张大图的软件。 本软件的主要特性有: 1.可以任意设置拼图的行列数,如单行、单列、多行多列; 2.支持缩放原图图片:可以统一原图的宽度或统一原图的高度; 3.支持...
图片拼接是指将多张图片横向或纵向排列形成一个长图。这个过程可以通过创建一个新的大图像,然后按照指定位置依次将每张小图绘制到新图像上来实现。关键在于计算每张图片在新图像上的起始坐标,确保它们正确对齐。...
在本项目中,我们将探讨如何利用图片拼接技术和JavaScript实现地图的拖拽和缩放功能,并且会提及一个C#编写的图片切割程序。 首先,我们要理解瓦片地图的工作原理。瓦片通常以256x256像素的大小进行切割,基于Web ...
3. **图片拼接**:这是项目的核心任务,涉及到将多张图像合并成一张新的大图。图片拼接常用于全景照片制作、图像融合、数据可视化等领域。 在实现图片拼接的过程中,开发者可能需要以下步骤: 1. **读取图像**:...
图片拼接技术是一种在计算机视觉领域中常见的图像处理方法,它通过将多张图片组合成一张大图,来实现全景照片、图像拼贴或者虚拟现实场景的创建。在这个C++项目中,开发者利用了OpenCV库,特别是OpenCV 2.4.9版本,...
在编程环境中,可以通过定位和调整每个图片的坐标,然后将它们写入同一张大图。 5. **调整与优化**:拼接后可能需要进行一些后期处理,比如调整对比度、亮度、色彩平衡,或者添加边框、阴影等特效,使图片看起来...
7. **优化算法**:在实际的碎图拼接中,可能会使用到优化算法,如梯度下降法、遗传算法或粒子群优化,以找到最佳的拼接顺序或位置。 8. **图像重采样**:当图像大小不同时,可能需要使用`imresize`函数进行重采样,...
总结,百度地图分析中的图片下载拼接涉及到地图坐标系转换、API调用、图块下载、图像处理等多个技术环节。通过这些技术,我们可以获取和处理百度地图上的任何区域的高分辨率图片,为地理信息分析、路线规划等应用...
在MATLAB中,手动选取控制点进行图片拼接是一种常用的方法,尤其在处理图像序列或者需要精确对齐图像时。这种技术不依赖于复杂的模式识别算法,而是通过用户直观地选择图像之间的对应点来实现。本文将深入探讨涉及的...