如何利用C语言处理图像?

操作方法

  • 01

    C语言是一切计算机语言的鼻祖,C语言的应用范围很广,那么,如何应用C语言处理图像呢? b>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) 释放内存图像缓冲区。 值得指出的是,这种处理方法不够。为此可以采用另一种方法:先在图像变换缓冲区中处理完毕后,再将变换后的图像一次显示在屏幕上。这样可以取得较好的显示效果。

(0)

相关推荐

  • 利用C语言设计求测试成绩总分与平均分

    利用C语言解决数学问题可以提高我们的思维和动手能力,例如求一名学生10次测试的总分和平均成绩,假如10次成绩分别为:80,85,77,56,68,83,90,92,80,98(这里可自行替换数值) 操 ...

  • 如何利用C语言for循环输出九九乘法口诀

    九九乘法口诀从我们小学感觉他特别繁琐难以记忆,很明显九九乘法口诀规律性特别强,只要掌握它的变化规律,就很容易记忆!那么本次就利用C语言的for循环嵌套使用输出九九乘法口诀, 利用简单的语句 就输出了九 ...

  • 如何利用R语言中的矩阵定义获取全部或部分元素

    R语言中的矩阵是一个二维数组,其中矩阵的组成元素是由数值型.字符型或逻辑型构成的.如果想要获取矩阵中的全部或部分元素,可以利用函数或字符获取元素.下面利用几个实例说明获取全部或部分元素,操作如下: 操 ...

  • 如何利用R语言中的函数方法获取标准差和平均值

    R语言中可以使用不同的方法获取数据的统计的值,如标准差.平均值和相关度等.其中,标准差是利用sd()函数,平均值是利用mean()函数,相关度是利用cor()函数.下面利用一个实例说明这三个函数的用法 ...

  • 如何利用R语言中的函数读取CSV文件中的内容

    R语言中的函数可以从CSV文件中读取文件内容,这个函数是read.table(),参数有文件名称.行头.第一列头标题和分隔符.下面利用一个实例说明读取csv文件内容,操作如下: 操作方法 01 第一步 ...

  • 怎么利用Excel绘制函数图像

    如何使用Excel绘制函数图像呢?由于函数取值的无限性,导致在利用Excel绘制函数时,对于初学者而言,往往无从下手.其实只要我们给定了函数的作用域,并通过函数计算机值域,就可以依据Excel所提供的 ...

  • 如何利用python语言sysconfig模块获取系统参数

    python语言中的sysconfig模块,可以查看系统的一些参数指标:直接调用sysconfig模块自带的方法,下面利用几个实例说明sysconfig模块获取系统参数,操作如下: 操作方法 01 第 ...

  • 如何利用R语言语法生成向量并展示每个向量元素

    R语言中的R对象,包括了向量.数组.列表.矩阵等.其中,向量可以分为整数.数值.逻辑.复数.字符和原生六种向量.如何声明一个向量对象呢?它的组成部分有哪些?下面利用几个实例说明向量,操作如下: 操作方 ...

  • win10利用添加语言解决Ctrl+空格快捷键冲突

    win10默认输入法下Ctrl+空格默认:中文(简体)输入法-输入法/非输入法切换,无论怎么改成Ctrl+什么键,点击应用后都会恢复.造成其它软件的Ctrl+空格键还是冲突无法使用.本人刚试过的一个解 ...