/** Java 绘图相关技术的学习*Graphics类相关技术知识:
1.图像的几何变换图像翻转:使用另一个重载的drawImage(Image img,int x_1,int y_1,目标矩形的第一坐标int x_2,int y_2,目标矩形的第二坐标int x1,int y1,源矩形的第一坐标int x2,int y2,源矩形的第二坐标ImageObserver observer)利用非缩放的图像来呈现缩放的矩形,动态执行所需的缩放。图像旋转:利用Graphics2D类的rotate()结合Math.toRadians()方法来实现。图像错切:利用Graphics2D类的shear(double x,double y)结合Math.toRadians()方法来实现。*/
package app;import java.awt.*;
import javax.swing.*;
import java.net.*;
import java.awt.event.*;//包含有main函数的类的类名和文件名必须保持一致
public class DigitalImage extends JFrame
{private static final long serialVersionUID = 1L;private final int width = 500;private final int height =500;private Image img;private int imgW = 500;private int imgH =500;private int x1=0, y1=0;private int x2 = imgW, y2 = imgH;private Canvas canvas = null;private JMenuBar menuBar = null;//图片旋转角度private int m_angle = 0;public DigitalImage(){super();init();}private void init(){this.setSize(width, height);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置窗体面板为绘图面板对象canvas = new Canvas();this.setContentPane(canvas);this.setTitle("绘图");//获取图片URL url = DigitalImage.class.getResource("lena.jpg");img = Toolkit.getDefaultToolkit().getImage(url);//创建菜单栏对象menuBar = new JMenuBar();this.setJMenuBar(menuBar);//创建菜单JMenu menu = new JMenu("几何变换");menuBar.add(menu);//创建菜单项JMenuItem Item1 = new JMenuItem("图像旋转");Item1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Graphics2D g = (Graphics2D) getGraphics();m_angle = m_angle+15;g.rotate(Math.toRadians(m_angle));//此处画板对象和框架对象存在数据封装,在框架里需要操作画板需要传入指针g.drawImage(img, 0, 0, imgW, imgH, canvas); }});menu.add(Item1);//创建菜单JMenu Item2 = new JMenu("图像翻转");menu.add(Item2);//翻转方向菜单项JMenuItem childMenu1 = new JMenuItem("水平");childMenu1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//水平方向上,仅更改源矩形和目标矩形的x方向映射关系,即x的值。Graphics g = getGraphics();x1 = Math.abs(x1 - imgW);x2 = Math.abs(x2 - imgW);g.drawImage(img,0,0 ,imgW,imgH, x1,y1,x2,y2,canvas);}});JMenuItem childMenu2 = new JMenuItem("垂直");childMenu2.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){//垂直方向上,仅更改源矩形和目标矩形的y方向映射关系,即y的值。Graphics g = getGraphics();y1 = Math.abs(y1 - imgH);y2 = Math.abs(y2 - imgH);g.drawImage(img,0,0 ,imgW,imgH, x1,y1,x2,y2,canvas);}});Item2.add(childMenu1);Item2.add(childMenu2);//错切变换JMenuItem Item3 = new JMenuItem("图像错切");Item3.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent e){Graphics2D g = (Graphics2D)getGraphics();g.shear(0.3,0);g.drawImage(img, 0, 0, imgW, imgH, canvas);}});menu.add(Item3);}public static void main(String[] args){new DigitalImage().setVisible(true);}class Canvas extends JPanel{private static final long serialVersionUID = 1678373920467727747L;public void paint(Graphics g){super.paint(g);g.drawImage(img, 0,0, width, height, this);}}
} 

java-图像的几何变换相关推荐

  1. 图像处理 --- 三、图像变换 3.2 图像的几何变换

    2. 图像的几何变换 图像几何变换是指用数学建模的方法来描述图像位置.大小.形状等变化.图像几何变换是图像处理及分析的基础. 图像的几何变换包括:图像平移.比例缩放.旋转和图像插值. 图像几何变换的实 ...

  2. youcans 的 OpenCV 学习课—5.图像的几何变换

    youcans 的 OpenCV 学习课-5.图像的几何变换 本系列面向 Python 小白,从零开始实战解说 OpenCV 项目实战. 几何变换是指对图像的位置.大小.形状.投影进行变换,是将图像从 ...

  3. 图像处理———图像的几何变换原理及实现

    图片引用这篇博客 传送门,外加自己的理解 图像的几何变换有平移.旋转.尺度(放大缩小).偏移.恒等变换等 一.几何变换的变换矩阵 学过坐标变换的应该知道这啥意思,将图像中点的坐标写成齐次坐标的形式,再 ...

  4. 【OpenCV图像处理】五、图像的几何变换(下)

    5.1 图像的缩放变换 图像的缩放指的是将图像的尺寸变小或变大的过程,也就是减少或增加原图像数据的像素个数.简单来说,就是通过增加或删除像素点来改变图像的尺寸.当图像缩小时,图像会变得更加清晰,当图像 ...

  5. OpenCV计算机视觉(三) —— 图像的几何变换

    图像的几何变换主要包括图像的翻转.平移.旋转.透视以及一些镜像变换.主要是对图像的大小.位置.坐标进行操作,来实现图片的几何变换. 思维导图如下: 下面将针对这五个方面进行一一讲解. 图像的翻转 主要 ...

  6. 图像处理之图像的几何变换

    一.前言 图像的几何变换是将一幅图像中的坐标映射到另外一幅图像中的新坐标位置,它不改变图像的像素值,只是改变像素所在的几何位置,使原始图像按照需要产生位置.形状和大小的变化.本文主要介绍图像的基本几何 ...

  7. Halcon 第七章『图像的几何变换』◆第1节:图像的仿射变换(位置变换、形状变换)及应用

    一.介绍 由于相机拍摄的时候可能存在角度偏差,因此实际获得的画面可能会与想象中有所差异.为了校正图像在拍摄中的失真问题,可以对图像进行一些简单的几何变换,如平移.缩放和旋转等,这些是图形学中的基本几何 ...

  8. 【数字图像处理】图像的几何变换之 图形平移与旋转

    (一)基础知识 (1)常见图片几何运算 图像的几何变换主要就是一下这些. 这里只是一些最简单的函数处理 ·图像的平移变换 ·图像的镜像变换 ·图像的转置变换 ·图像的旋转变换 ·图像的缩放 这里我主要 ...

  9. java 图像锐化_Java实现图像的模糊与锐化实例

    时间:2018-09-28 概述:图片模糊 锐化 Java 图像处理的一个例子,实现图片的模糊和锐化,在PhotoShop中,这是一个很常用的滤镜效果,用Java同样也可实现这些强大的功能,图像锐化效 ...

  10. matlab平面图形的几何变换,matlab图像的几何变换

    2. 了解平移.伸缩.对称.旋转等变换. 3. 学习掌握 MATLAB 软件有 实验报告 课程名称:数学实验 实验名称:平面图形的几何变换 指导教师: 实验目的.要求: 1. ...... Matla ...

最新文章

  1. apppath php,App.php
  2. MatConvnet工具箱文档翻译理解(2)
  3. go日期和时间相关函数使用示例
  4. 手把手教你玩转SOCKET模型:完成例程(Completion Routine)篇
  5. 从体验出发构建以增长为目标的视频服务体系
  6. 心电信号去噪(part2)--中值滤波器
  7. Windows MobileCE 开发书籍大全
  8. 迷你世界无限迷你币体验服务器,迷你世界体验服无限迷你币
  9. 华为服务器报错信息,厂商 push 不通排查指南
  10. 机器学习、AI那么火,千万小心别掉进前人的坑
  11. Windows下部署elasticsearch和kibana
  12. 【数据结构的魅力】003.算法归并与随机快排
  13. php xml namespaces,PHP getDocNamespaces()函数讲解
  14. Inceptor如何访问本地文件
  15. android手机屏分辨率和屏幕逻辑,手机屏幕分辨率术语:逻辑分辨率和物理分辨率...
  16. cf Sonya and Robots
  17. js重新渲染或重新加载div
  18. 基于概率论的分类方法:朴素贝叶斯及CSDN_RSS源分析
  19. 计算机淡蓝色ppt背景,计算机图表蓝色边框PPT模板.ppt
  20. cJSON Note(4):转换字符串

热门文章

  1. LeetCode 1073. 负二进制数相加(负数进制)
  2. linux下实现内存监视,shell脚本来监视Linux上的内存使用情况
  3. postek二次开发_20190626_二次开发BarTender打印机_C#代码_一边读取TID_一边打印_打印机POSTEK...
  4. Python导入全局、局部模块以及如何让避免循环导入
  5. textlayout Java_Java TextLayout.getBounds方法代码示例
  6. html仿手机界面,javascript新手实例3-仿手机聊天界面(if else运用)
  7. 文件标识符无效。使用 fopen 生成有效的文件标识符。_「存储架构」块存储、文件存储和对象存储(第1节)...
  8. 斯坦福大学NLP公开课CS224n上映啦!华人助教陪你追剧
  9. block在美团iOS的实践
  10. 论文浅尝 | 面向自动问题生成的跨语言训练