利用C语言实现计算机图像处理的方法

1.图像平移

图像平移只是改变图像在屏幕上的位置,图像本身并不发生变化。
假设原图像区域左上角坐标为(x0, y0),右下角坐标为(x1, y1),将图像分别沿x和y轴平移dx和dy,则新图像的左上角坐标为(x0 + dx, y0 + dy),右下角坐标为(x1 + dx, y1 + dy)。坐标平移变换公式为:
x′ = x + dx
y′ = y + dy
在屏幕上实现图像的移动分为四个步骤:
⑴ 保存原图像到缓冲区。
⑵ 擦除原图像。
⑶ 计算平移后的新坐标。
⑷ 在新的坐标位置重新显示原图像。
其中,擦除原图像的方法与图形变换中擦除原图形的方法一致,在实现中仍采用XOR异或方式画图擦除原图像。对于新坐标值的计算还需要考虑边界情况,不要在图像平移后超出允许的屏幕范围。此外,如果采用C函数getimage()和putimage()来保存和恢复图像,则图像的大小不能超过64K。
2.图像颠倒
图像颠倒是指把定义好的图像区域上下翻转地显示在屏幕上。分析图像颠倒的过程,可发现每行的图像信息都保持不变,而只是改变了行的顺序,将第一行与最后的第n行相互交换,第二行与第n - 1行交换……,依此类推,从而实现了图像的颠倒。只需采用按行交换的方式,即可方便地修改缓冲区内容,实现图像的颠倒。基本步骤如下:
(1) 用getimage()保存原图像,并擦除原图像。
(2) 计算图像的高度,即行数height;计算图像宽度width;计算保存一行图像信息 
height = bottom - top + 1;
width = right - left + 1;
linebytes = (width + 7) / 8 * 4;
(3)利用行交换缓冲区linebuf在图像内存缓冲区中进行信息交换,即把第一行与最末行交换,第2行与第n-1行交换……,依此类推,直至 全部交换完毕。
(4)把交换后的图像缓冲区内容重新显示在屏幕上。
3.图像镜像变换
镜像变换是指将指定区域的图像左右翻转地显示在屏幕。分析镜像变换过程可以发现:每行图像信息的处理方式是相同的,而且行顺序不发生变化,只是每一行的像素信息按从左到右的顺序进行了左右颠倒,从而实现了镜像变换。因此,采用按行逐点变换的方式实现图像的镜像。 
首先,对于左上角为(left, top),右下角为(right, bottom)矩形区域图像,给出其中任意点(x0, y0)镜像变换后的新坐标(x′, y′)的坐标变换公式:
x′ = right - x0 + left
y′ = y0
根据以上公式,对各个像素点计算新坐标后,直接把它显示在屏幕的相应位置上。
如果完全逐点地进行交换,处理一个像素点就要读取一次像素值,从而降低了变换速度。由于像素点是顺序存放在各个bit位上,每读取一个字节就包含了8个像素点的信息,只需设置不同的位屏值bitmask,就可以获得不同像素点的信息。因此采用按行逐字节变换的方式,每读一次就进行8个像素点的变换,以提高变换速度。
将一矩形区域的图像进行镜像变换的基本步骤如下:
(1) 用getimage()把图像保存到内存缓冲区,并擦除原图像。
(2) 计算图像高度,即行数高度height和宽度width;计算保存一行图像信息占用的字节数linebytes。计算公式如下:
height = bottom - top + 1;
width = right - left + 1;
linebyte = (width + 7) / 8 *4;
(3) 对图像进行镜像。
(4)释放内存图像缓冲区。
4.图像旋转
图像旋转是指把定义的图像绕某一点以逆时针或顺时针方向旋转一定的角度,通常是指绕图像的中心以逆时针方向旋转。
假设图像的左上角为(left, top),右下角为(right, bottom),则图像上任意点(x0, y0)绕其中心(xcenter, ycenter)逆时针旋转angle角度后,新的坐标位置(x′, y′)的计算公式为:
xcenter = (right - left + 1) / 2 + left;
ycenter = (bottom - top + 1) / 2 + top;
x′ = (x0 - xcenter) cosθ - (y0 - ycenter) sinθ + xcenter;
y′ = (x0 - xcenter) sinθ + (y0 - ycenter) cosθ + ycenter;
与图像的镜像变换相类似,也采用按行逐点变换的方式实现图像的旋转,其步骤如下:
(1) 用getimage()把图像保存到内存缓冲区,并擦除原图像。
(2) 计算图像高度height,宽度width,及保存一行图像信息占用的字节数linebytes,计算公式与镜像变换的计算公式相同。
(3) 对图像逐行进行旋转变换。
(4) 释放内存图像缓冲区。
值得指出的是,这种处理方法不够。为此可以采用另一种方法:先在图像变换缓冲区中处理完毕后,再将变换后的图像一次显示在屏幕上。这样可以取得较好的显示效果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452108.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

E24- please install the following Perl modules before executing ./mysql_install_db

2019独角兽企业重金招聘Python工程师标准>>> [roott-cet7 scripts]# ./mysql_install_db --basedir/usr/local/mysql/ --datadir/app/data/ --usermysql FATAL ERROR: please install the following Perl modules before executing ./mysql_install_db: Data::Dumpe…

SpringMVC异常报406 (Not Acceptable)的解决办法

使用SpsringMVC&#xff0c;使用restEasy调试&#xff0c;controller请求设置如下&#xff1a; Java代码 RequestMapping(value"/list",methodRequestMethod.GET,producesMediaType.APPLICATION_JSON_VALUE) ResponseBody public List<EditTimeout> list()…

Diango博客--25.使用Coverage统计测试覆盖率

文章目录1. 前言2. 安装 Coverage3. 简单配置 Coverage4. 运行 Coverage5. 完善 Coverage 配置6. 生成 HTML 报告7. 完善单元测试1. 前言 我们完成了对 blog 应用和 comment 应用这两个核心 app 的测试。现在我们想知道的是究竟测试效果怎么样呢&#xff1f;测试充分吗&#x…

面向对象语言的优点

1.一致的表达方法 从前面章节的讲述中可以知道&#xff0c;面向对象开发基于不随时间变化的、一致的表示方法。这种表示方法应该从问题域到OOA&#xff0c;从OOA到OOD&#xff0c;最后从OOD到面向对象编程(OOP)&#xff0c;始终稳定不变。 一致的表示方法&#xff1a; 既有利…

最好的英文词典

辞典对于学外语的作用&#xff0c;怎么强调也不过分。经常接触英语的人都知道&#xff0c;遇到生词不可怕&#xff0c;可怕的是遇到认识的单词&#xff0c;又不明白这句话什么意思。这个时候&#xff0c;辞典的作用就发挥出来了。 今天一位朋友问我一句英文的意思&#xff0c;…

oracle用户创建及权限设置

权限&#xff1a; create session create table unlimited tablespace connect resource dba 例&#xff1a; #sqlplus /nolog SQL> conn / as sysdba; SQL>create user username identified by password SQL> grant dba to username; SQL> conn username/password…

Android动画之逐帧动画(FrameAnimation)详解

今天我们就来学习逐帧动画,废话少说直接上效果图如下: 帧动画的实现方式有两种&#xff1a; 一、在res/drawable文件夹下新建animation-list的XML实现帧动画 1、首先在res/drawable文件夹下添加img00-img24共25张图片 2、新建frame_anim.xml [html] view plaincopy <?xml v…

ajax-简单参数方法实现阴影效果

注&#xff1a; 简单参数 &#xff08;按照参数的数量和位置传递参数&#xff09; 使用时按照位置、数量传递 shadow.js函数//简单参数实现方式/** slices:阴影* opacity:透明度* zIndex:层级* */jQuery.fn.shadow_simple function (slices,opacity,zIndex) { //获取到每个…

第一二三范式的简单理解

第一范式&#xff08;无重复的列&#xff09; 定义&#xff1a;数据库表的每一列都是不可分割的原子数据项&#xff0c;而不能是集合&#xff0c;数组&#xff0c;记录等非原子数据项。如果实体中的某个属性有多个值时&#xff0c;必须拆分为不同的属性 通俗解释&#xff1a;一…

网络爬虫--1.通用爬虫和聚焦爬虫

文章目录一.前言二.通用爬虫1.工作原理2.通用爬虫的局限性三.聚焦爬虫一.前言 根据使用场景&#xff0c;网络爬虫可分为 通用爬虫 和 聚焦爬虫 两种。 其中通用网络爬虫是捜索引擎抓取系统&#xff08;Baidu、Google、Yahoo等&#xff09;的重要组成部分。主要目的是将互联网…

敏捷教练的工具箱

学习并不是简简单单的阅读和浏览&#xff0c;而是一个积累的过程&#xff0c;一个通过持续的学习&#xff0c;对自己的知识体系不断丰富、索引的过程。接下来我会从四个方面入手分享我的经验。 高质量的信息源和高效的学习 Google是一个很好的工具&#xff0c;通过它&#x…

log4j教程

详细的Log4j使用教程 转载 2016年08月19日 14:44:49 5072 日志是应用软件中不可缺少的部分&#xff0c;Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站&#xff1a;jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。…

BC范式介绍

设关系模式R<U&#xff0c;F>∈1NF&#xff0c;如果对于R的每个函数依赖X→Y&#xff0c;若Y不属于X&#xff0c;则X必含有候选码&#xff0c;那么R∈BCNF。 即为&#xff1a;对于关系模式R&#xff0c;若 R为第一范式&#xff0c;且每个属性都不部分依赖于候选键也不传递…

com.jhlabs:imaging:jar:01012005 所在仓库+captcha验证码maven依赖

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 <repositories> <repository> <id>atlassian</id> <name>atlassian</name&g…

python 发送邮件的两种方式【终极篇】

python 发送邮件的两种方式【终极篇】 一&#xff0c;利用python自带的库 smtplib简单高效 from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.header import Header import smtplib from django.conf import settingsmail_hos…

网络爬虫--2.HTTP和HTTPS

文章目录一.简介二.HTTP的请求与响应三.客户端HTTP请求1.格式2.请求方法四.常用的请求报头1.Host (主机和端口号)2.Connection (链接类型)3.Upgrade-Insecure-Requests (升级为HTTPS请求)4. User-Agent (浏览器名称)5. Accept (传输文件类型)6.Referer (页面跳转处)7.Accept-En…

解决win7的outlook打不开的问题

outlook打不开&#xff0c;一直显示正在处理 解决方法&#xff1a; 1. 按住Ctrl,双击打开组件&#xff0c;会提示是否进入安全模式&#xff0c; 进入安全模式 2. 单击Outlook中的文件-选项-加载项- 左下角的“COM加载项“ 旁边的“转到”&#xff0c;将所有加载项前面的勾都去掉…

IBM王阳:软件是凝聚创新力的最佳平台

导读&#xff1a;在IBM全球副总裁兼IBM中国开发中心总经理王阳博士看来&#xff0c;IBM百年不衰的根本原因在于将创新力凝结成软件然后进行合适的传播&#xff0c;其间最重要的是成功打造出了一个吸引人才、培养研发人才并激发出人才创新力的环境和氛围。而保持创新领导力的关键…

数据库的规范化

在关系数据库中&#xff0c;对关系模式的基本要求是满足第一范式。 规范化程度过低的关系不一定能够很好地描述现实世界 可能存在插入异常、删除异常、修改复杂、数据冗余等问题 解决方法就是对其进行规范化&#xff0c;转换成高级范式 一个低一级范式的关系模式&#xff0c;通…

Jquery 多行拖拽图片排序 jq优化

<!DOCTYPE html> <html> <head> <meta charset"UTF-8"> <title>jQuery图片拖动排序代码</title><style type"text/css">.item_container{position:relative;height:auto;overflow:hidden;} .item_content ul{li…