数字图像几何变换代码
数字图像的旋转变换、镜像变换、错切变换以及平移变换等称为数字图像的几何变换。下文是数字图像旋转变换、镜像变换以及错切变换的基本原理的介绍以及C#代码的实现。
(1)数字图像旋转变换。
数字图像旋转变换基本原理:
数字图像旋转变换代码实现:
private void btn_Rotate_Click(object sender, EventArgs e)//旋转变换按钮 { BmapNew = Rotate(60.0, BmapOld); this.pictureNew.Image = BmapNew; } private Bitmap Rotate(double Angle,Bitmap mapOld)//旋转变换代码 { double rad=Math.PI/180.0*Angle; Matrix T = new Matrix(3, 3); T.setElem(0, 0, Math.Cos(rad)); T.setElem(0, 1, -Math.Sin(rad)); T.setElem(1,0, Math.Sin(rad)); T.setElem(1, 1, Math.Cos(rad)); T.setElem(2, 2,1); int w = mapOld.Width; int h = mapOld.Height; Bitmap mapNew = new Bitmap((int)(w * Math.Cos(rad) + h * Math.Sin(rad)) + 1, (int)(w * Math.Sin(rad) + h * Math.Cos(rad)) + 1); Matrix map = new Matrix(3, 1); for (int j = 0; j < h; j++) { for (int i = 0; i< w; i++) { map.setElem(0, 0, i); map.setElem(1, 0, j); map.setElem(2, 0, 1); map = T.mult(map); Color pixel=mapOld.GetPixel(i,j); mapNew.SetPixel((int)map.getElem(0, 0) + (int)(h* Math.Sin(rad)), (int)map.getElem(1, 0), pixel); } } return mapNew; }
(2)数字图像镜像变换
数字图像镜像变换基本原理:
private void btn_JingXiang_Click(object sender, EventArgs e)//镜像变换按钮 { BmapNew = Mirror(BmapOld); this.pictureNew.Image = BmapNew; } private Bitmap Mirror(Bitmap mapOld)//图片镜像变换代码 { int w = mapOld.Width; int h = mapOld.Height; Matrix T = new Matrix(3, 3); T.setElem(0, 0, -1); T.setElem(0, 2, w); T.setElem(1, 1, 1); T.setElem(2, 2, 1); Bitmap mapNew =new Bitmap(w,h); Matrix map = new Matrix(3, 1); for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { map.setElem(0, 0, i); map.setElem(1, 0, j); map.setElem(2, 0, 1); map = T.mult(map); Color pixel = mapOld.GetPixel(i, j); mapNew.SetPixel((int)map.getElem(0, 0)-1, (int)map.getElem(1, 0), pixel); } } return mapNew; }
(3)数字图像错切变换
数字图像错切变换基本原理:
数字图像错切变换代码实现:
private void btn_ShearMapping_Click(object sender, EventArgs e)//错切变换按钮 { BmapNew = ShearMapping(30.0, BmapOld); this.pictureNew.Image = BmapNew; } private Bitmap ShearMapping(double Angle,Bitmap mapOld)//图片错切变换代码 { double rad = Math.PI / 180.0 * Angle; int w = mapOld.Width; int h = mapOld.Height; int newW = w + (int)(h * Math.Tan(rad)); Bitmap mapNew = new Bitmap(newW, h); for (int j = 0; j < h; j++) { for (int i = 0; i < w; i++) { Color pixel = mapOld.GetPixel(i, j); mapNew.SetPixel((int)((h-j)*Math.Tan(rad))+i, j, pixel); } } return mapNew; }
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
C#选择多个文件并读取多个文件数据
原文: C#选择多个文件并读取多个文件数据 版权声明:本文为博主原创文章,转载请附上链接地址。 https://blog.csdn.net/ld15102891672/article/details/80586097 在编程工作中有时候会涉及到在文件管理器中选择多个文件,点击确定后程序可以依次读取所选文件里面的数据,那么该怎么实现呢?小博也是查阅了不少资料才获得的经验,下面小博以C#语言为例,附上一次读取多个文件的主要代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.IO; using System.Windows.Forms; namespace ... { Class ... { private void button1_Click(object sender, EventArgs e) {...
- 下一篇
基于gulp的前端自动化方案
前言 最近几年前端技术发展日新月异,特别是单页应用的普及。组件化、工程化、自动化成了前端发展的趋势。webpack已经成为了前端打包构建的主流,但是一些老古董的项目还是存在的,也有优化的必要,正好公司的老项目需要优化,不多说拿gulp实践一下。 本文需要安装node(自行安装),并了解过gulp入门。gulp脚本下载:https://github.com/youhunwl/gulp 欢迎star。 实践 创建项目目录 首先初始化npm依赖项与基本信息,使用命令npm init一直回车,生成package.json文件,也可以直接去上边github仓库目录下载。 你的项目目录关系到你的gulp脚本里的任务路径,我脚本里写的是匹配所有的目录和文件。我简单举个例子:这里js/common里的js文件也会被处理。如果只想处理特定目录的文件,请修改任务里的路径。 demo/ ├── css/ │ ├── index.css ├── js/ │ ├── common/ │ │ └─ common.js │ ├── index.js ├── img/ │ ├── logo.png └── ind...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7