2017-12-03 17:28:28 arryCC 阅读数 3309

数字图像处理


一、学习内容总结

1. 第一章 绪论

本章主要有几个目的:

  1. 定义我们称之为数字图像处理领域的范围;
  2. 通过考察几个领域,给出图像处理技术状况的概念;
  3. 讨论图像处理用到的几种方法;
  4. 概述通用目的的典型图像处理系统的组成。

1.1 什么是数字图像处理

我们给出一些定义:

  • 强度灰度:一幅图像可以被定义为一个二维函数 f(x,y),其中 x,y 是空间(平面)坐标,而在任何一处的幅值 f 被称为在该点的灰度或强度。
  • 数字图像:当 x,y 或灰度值 f有限的离散数值时,称该图像为数字图像。也就是说数字图像是由有限数量的元素组成,每个元素都有特定的位置和幅值。这些元素被称为图画元素图像元素像素
  • 数字图像处理 : 指用特定的计算机来处理数字图像。

本书中将数字图像处理界定为其输入和输出都是图像的处理。

1.2 使用数字图像处理领域的实例

  • 伽马射线成像:医学和天文。
  • X射线成像:最早用于成像的电磁辐射源之一,医学诊断。
  • 紫外波段成像 :荧光显微镜。
  • 可见光及红外线成像 :可见显微镜技术,遥感,天气预测和预报,红外卫星图像,自动视觉检测,检测丢失的部件,指纹图像。
  • 微波波段成像 :雷达。
  • 无线电波段成像 :天文学和医学(核磁共振)。
  • 其他方式 :声波成像,电子显微镜方法,(由计算机产生的)合成图像。

1.3 数字图像处理的基本步骤

这里写图片描述

1.4 图像处理系统的组成

这里写图片描述

2. 第二章 数字图像处理基础

本章主要介绍数字图像处理一些基本概念

2.1 视觉感知要素

  • 人眼的结构

    重点介绍视网膜里的两类光感受器

    • 锥状体 :对颜色高度敏感,这种视觉称为白昼视觉或者亮视觉。高照明水平下执行。
    • 杆状体 :没有彩色感觉,对低照明度敏感,称为暗视觉或微光视觉。低照明水平下执行。
  • 亮度适应与辨别

    • 亮度适应现象 :视觉系统不能同时在一个范围内工作,它是通过改变其整个灵敏度来完成这一较大变动的。
    • 韦伯比 :较大:亮度辨别能力较差;反之,较好。
  • 感知亮度 不是简单的强度的函数

    • 视觉系统往往会在不同强度区域的边界处出现“下冲”或“上冲”现象。
    • 同时对比、错觉

2.2 光和电磁波谱

  • 电磁波是能量的一种,任何有能量的物体都会释放电磁波谱。它可以用 波长 (λ)、频率(v)或能量(E) 来描述,其中

λ=c/v

E=hv

  • 光是一种特殊的电磁辐射,可以被人眼感知。
    • 单色光 是没有颜色的光,也成为无色光。唯一属性就是它的强度或者大小,用 灰度级 来表示。单色图像常被称为 灰度图像
    • 彩色光源 的质量可以用发光强度、光通量和亮度 来表示。

2.3 图像感知和获取

  • 图像获取方式

    • 使用单个传感器来获取图像
    • 使用条带传感器获取图像
    • 使用传感器阵列获取图像
  • 简单的图像形成模型

    用形如 f(x,y) 的二维函数来表示图像,那么:

    0<f(x,y)<

    f(x,y) 可以用两个分量来表征:

    • 入射分量 入射到被观察场景的光源照射总量,用i(x,y) 表示;
    • 反射分量 场景中物体所反射的光照总量,用r(x,y) 表示。

    所以有:

    f(x,y)=i(x,y)r(x,y),0<i(x,y)<,0<r(x,y)<1

2.4 图像取样和量化

  • 取样和量化的基本概念

    • 取样 :对坐标值进行数字化
    • 量化 : 对幅值数字化

    数字图像的质量在很大程度上取决于取样和量化中所用的样本数灰度级

  • 数字图像表示

    用数列矩阵来表示一幅数字图像。在实数矩阵中,每个元素称为图像单元、图像元素或像素。

    对比度 一幅图像最高和最低灰度级间的灰度差为对比度。

    存储数字图像所用的比特数为:

    b=M×N×k,M=Nb=N2k

    灰度级数L=2k

  • 空间和灰度分辨率

    • 空间分辨率 :图像中可辨别的最小细节的度量。在数量上,表示每单位距离线对数和每单位距离点数是最通用的度量(必须针对空间单位来规定才有意义)。
    • 灰度分辨率 :指在灰度级中可分辨的最小变化。
  • 图像内插

    用已知数据来估计未知位置的数据处理。是基本的图像重取样方法。可以处理图像的放大和缩小。

2.5 像素间的基本关系

  • 相邻像素

    位于坐标 (x,y) 处的像素 p 有4个水平和垂直上的相邻像素,用 N4(p) 表示;有四个对角相邻像素,用 ND(p) 表示。如果 p 位于图像边界,则某些邻点可能 落在图像外边。

  • 邻接性、连通性、区域和边界

    • 4邻接、8邻接、混合邻接
  • 距离度量

    • 欧氏距离(圆)
    • D4 城市街区距离(菱形)
    • 棋盘距离(正方形)

2.6 常用数学工具介绍

  • 阵列和矩阵操作
  • 线性操作和非线性操作
  • 算术操作
  • 集合和逻辑操作
    • 基本集合操作
    • 逻辑操作
    • 模糊集合
  • 空间操作
    • 单像素操作
    • 邻域操作
    • 几何空间变换与图像配准
  • 向量和矩阵操作
  • 图像变换

3.第三章

3.1 背景知识

  • 空间域 就是简单的包含图像像素的平面。空间域处理可用以下方式表示:

g(x,y)=T[f(x,y)],T(x,y)

  • 灰度变换函数
    s=T(r),r,s

3.2 基本灰度变换函数

  • 图像反转

    得到灰度范围为 [0,L1] 的一幅图像的反转图像:(得到等效的照片底片)

    s=L1r

  • 对数变换

    对数变换的通用形式:

    s=clog(1+r)

    扩展图像中暗像素的值,同时压缩更高灰度级的值。反对数变换的作用与此相反。

这里写图片描述

  • 幂律变换(伽马)变换

    基本形式:

    s=crγ

    γ<1 变亮,大于1变暗,c=γ=1 恒等变换。

这里写图片描述
* 分段线性变换函数
* 对比度拉伸:扩展图像灰度级动态范围处理,因此它可以跨越记录介质和显示装置的全部灰度范围。

根据$r,s$ 的取值,变换可以为线性函数和阈值处理函数。
  • 灰度级分层:突出特定图像灰度范围的亮度。有两种方法:

    • 突出范围 [A,B] 内的灰度,并将所有其他灰度降低到一个更低的级别;
    • 突出范围[A,N] 内的灰度,并保持所有其他灰度级不变。
  • 比特平面分层:突出特定比特为整个图像外观作贡献。

    • 4个高阶比特平面,特别是最后两个比特平面,包含了在视觉上很重要的大多数数据。
    • 低阶比特平面在图像中贡献更精细的灰度细节。

    得出结论:储存四个高阶比特平面将允许我们以可接受的细节来重建原图像。这样可减少50%的存储量。

3.3 直方图的处理

  • 理论基础:若一幅图像的像素倾向于占据可能的灰度级并且分布均匀,则该图像会有高对比度的外观并展示灰色调的较大变化。

  • 直方图均衡:

    • 灰度范围为 [0,L1] 的数字图像的直方图是离散函数 h(rk)=nk,其中 rk 是第 k 级灰度值,nk 是图像中灰度为rk 的像素的个数。
    • 通过转换函数T(rk)变换,得到直方图均衡化。
    • 应用:自适应对比度增强。
  • 直方图匹配:用于处理后有特殊直方图的方法。

  • 局部直方图处理:以图像中每个像素邻域中的灰度分布为基础设计变换函数,来增强图像中小区域的细节。

  • 在图像增强中使用直方图统计:提供这样一种增强图像的方法:

    在仅处理均值和方差时,实际上直接从取样值来估计它们,不必计算直方图。这些估计被称为取样均值和取样方差。

3.4 空间滤波基础

  • 空间滤波机理

    • 空间滤波器的组成:
    • 一个邻域
    • 对该邻域包围的图像像素执行的预定义操作

    滤波产生的是一个新像素,新像素的坐标等于邻域中心的坐标,像素的值是滤波操作的结果。

  • 空间相关与卷积

    • 相关:滤波器模板移过图像并计算每个位置乘积之和的处理。一个大小为m×n 的滤波器与一幅图像 f(x,y) 做相关操作,可表示为w(x,y)f(x,y)
    • 卷积:与相关机理相似,但滤波器首先要旋转180o 一个大小为m×n 的滤波器与一幅图像 f(x,y) 做j卷积操作,可表示为w(x,y)f(x,y)

3.5 平滑空间滤波器

用于模糊处理和降低噪声。

  • 平滑线性滤波器(均值滤波器)

    它使用滤波器确定的邻域内像素的平均灰度值代替图像中每个像素的值。应用:

    • 降低噪声
    • 灰度级数量不足而引起的伪轮廓效应的平滑处理
    • 去除图像的不相关细节
  • 统计排序(非线性)滤波器

    最有代表性的是中值滤波器 ,特点:

    • 将像素邻域内灰度的中值(在中值计算中,包括原像素值)代替该像素的值;
    • 对处理脉冲噪声(椒盐噪声)非常有效。

3.6 锐化空间滤波器

  • 拉普拉斯算子:最简单的各向同性微分算子,是一个线性算子。因其为微分算子,因此强调的是图像中灰度的 突变而不是灰度级缓慢变换的区域。

  • 非锐化隐蔽和高提升滤波:从原图像中减去一部分非锐化的版本。步骤:

    • 模糊原图像
    • 从原图像减去模糊图像
    • 将模板加到原图像上
  • 梯度:图像处理中的一阶微分用梯度实现。对于函数f(x) ,在坐标(x,y) 处的梯度定义为二维列向量。它指出在位置f(x,y)f的最大变化率方向。

    应用:边缘增强。

4.第四章

本章主要为傅里叶变换的原理打一个基础,并介绍在基本的图像滤波中如何使用傅里叶变换。

4.1. 基本概念

  • 傅里叶概念:任何周期函数都可以表示为不同频率的正弦和或余弦和的形式,每个正弦项和或余弦项乘以不同的系数(傅里叶级数)。
  • 傅里叶变换:在非周期函数用正弦和或余弦和乘以加权函数的积分来表示的公式。
  • 介绍复数、傅里叶级数、冲击及其取样特征、连续函数的傅里叶变换以及之前提过的卷积。

4.2. 取样与取样函数中的傅里叶变换

  • 取样

    在连续函数f(x,y) 中模拟取样的一种方法是:用一个ΔT 单位间隔的冲击串作为取样函数去乘以f(t) .

  • 取样函数的傅里叶变换

    空间域来两个函数乘积的傅里叶变换是两个函数在频率域的卷积。

  • 取样定理

    如果以超过函数最高频率的两倍的取样来获取样本,连续的带限函数可以完全从它的样本集来恢复。

4.3. DFT小结

在课本上,作者给了我们详细的总结:

这里写图片描述
这里写图片描述
这里写图片描述

4.4. 频率域滤波

  • 步骤
    • 等到填充参数PQ
    • 形成大小为P×Q 的填充后的图像fp(x,y)
    • (1)x+y 乘以fp(x,y)移到其变换中心
    • 计算上一步骤的DTF,得到F(u,v)
    • 生成实的、对称的滤波函数H(u,v)
    • 得到处理后的图像gp(x,y)
    • gp(x,y) 的做上限提取M×N区域 ,得到最终的处理结果g(x,y)
  • 空间域与频率域间的纽带是卷积定理。

4.5. 使用频率域滤波器平滑图像

三种低通滤波器来平滑图像

  • 定义总结

这里写图片描述

  • 特性
    • 理想低通滤波器(ILFP)
    • 特性:模糊和振铃。
    • 布特沃斯低通滤波器(BLPF)
    • 特性:随着阶数增高,其振铃和负值变明显。(一阶时无)
    • 高斯低通滤波器(GLPF)
    • 特性:无振铃

4.6. 使用频率域滤波器锐化图像

  • 三种高通滤波器来锐化图像
    • 定义总结

这里写图片描述
* 特性

* 理想高通滤波器(IHPF)
  * 有振铃
* 布特沃斯高通滤波器(BHPF)
  * 比IHPF更平滑
* 高斯低通滤波器(GHPF)
  * 比前两个更平滑,即使微小物体和细线条得到的结果也比较其清晰
  • 其他方式

    • 拉普拉斯算子
    • 钝化模板、高提升滤波和高频强调滤波
    • 同态滤波

4.7.选择性滤波器

处理指定频段或者频率域的小区域

  • 带阻滤波器和带通滤波器

    • 带阻滤波器
      这里写图片描述

    • 带通滤波器

    • 通过1减去带阻得到。

  • 陷波滤波器:拒绝事先定义的关于频率矩形中心的一个邻域的频率。

    • 陷波带阻滤波器

    用中心已被平移到陷波滤波中心的高通滤波器的乘积来构造。

    • 陷波带通滤波器

    通过1减去带阻得到。

2019-06-01 14:14:32 qq_36764147 阅读数 136

参考资料

1. 图像处理工具箱(MATLAB)
2. Digital Image Processing Using Matlab_2ed_Gonzalez
3. Digital Image Processing 4th Edition [Rafael C. Gonzalez]
4. Image Processing, Analysis, and Machine Vision, 4th

基本内容

1. 图像基础

  1. 图像的采样和量化
  2. 数字图像的表示
  3. 数字图像的性质
  4. 像素之间的关系

2. 图像增强

2.1 处理方法

  1. 空域
    1.1 基础知识

    • 点运算
    • 代数运算
    • 直方图运算

    1.2 空域滤波器

    • 平滑空间滤波器
    • 锐化空间滤波器
  2. 频域

    • 平滑滤波器(低通)
    • 锐化滤波器(高通)

2.2 处理策略

  • 全局
  • 局部

2.3 处理对象

  • 二值化图像
  • 灰度图像
  • 彩色图像

3. 图像复原

  • 图像退化/复原过程模型
  • 噪声模型
  • 空间域滤波复原(唯一退化的是噪声)
  • 频率域滤波复原(削减周期噪声)

4. 图像压缩

  • 图像压缩模型
  • 信息论基础
  • 无损压缩
  • 有损压缩
  • 图像压缩标准
  • 视频压缩标准

5. 形态学图像处理

  • 膨胀和腐蚀
  • 开操作和闭操作
  • 击中或击不中变换
  • 形态学的应用

6. 图像分割

  • 阈值化处理
  • 基于边缘的分割
  • 基于区域的分割
2018-09-28 10:28:07 SaLaHiozzzzz1 阅读数 932

 

 主要记载学习数字图像处理的基本知识,仅供参考。

目录

一、什么是图像处理?

二、图像的数字化表达

三、数字图像处理的基本知识


一、什么是图像处理?

     图像处理就是对图像信息进行加工处理,满足实际的应用需求。

图像处理技术分为两大类:

  • 模拟图像处理
  • 数字图像处理 (本文重点)

     数字图像处理就是利用数字计算机或者其他高速、大规模集成数字硬件,对从图像信息转换来的数字信号进行某些数字运算或者处理,以提高图像的质量。

二、图像的数字化表达

  1、图像的空间表达式:

                                             I=f(x,y,z,\lambda ,t)

        其中,I为图像像素点的强度,(x,y,z)代表图像像素的空间坐标,λ为波长,t为时间。上式为活动的、彩色的、三维的视频图像表达式。因此,对于

  • 静止图像➡与t无关
  • 单色图像➡与λ无关
  • 平面图象➡与z无关

因此,我们主要讨论的平面的、静止的、单色的图像表达式为:

                                                               I=f(x,y)

   2、图像采样

   

      为了适应数字计算机的处理,必须对连续图像函数进行空间和幅值数字化。空间坐标(x,y)的数字化称为图像采样,而幅值数字化被称为灰度级量化。经过数字化后的图像成为数字图像。

  3、数字图像的主要表示方法

   1)灰度图像的阵列表示法

         设连续图像f(x,y)按等间隔取样,排成M\times N阵列(一般取方阵列N\times N),如下图所示

          图像阵列中每个元素(“点”)都是离散值,称为像素(pixel)。一般取阵列N 和灰度级C都是2的整数幂。即取N=2^{n}C=2^{n}.

  2) 二值图像表示法

       二值图像:就是只有黑白两个灰度级,即像素灰度级非1即0.如文字图片。

4、描述数字图像的基本参数

  1)分辨率

图像分辨率:数字化图像的大小,对原始图像的采样分辨率,即该图像水平和垂直方向的像素个数。

屏幕分辨率:显示器屏幕上的最大显示区域,即水平与、垂直方向的像素个数。

像素分辨率:像素的宽和高之比一般为1:1

   2)图像深度

           图像深度:也称图像灰度、颜色深度。表示数字位图图像中每个像素上用于表示颜色的二进制数字位数。

           显示深度:表示显示器上每个点用于显示颜色的二进制数字位数。

             如显示器的显示深度小于数字图像的深度,就会使数字图像颜色的显示失真。

3)图像文件大小

      用字节表示图像文件大小时,一副未经压缩的数字图像的数据量大小计算如下:

         图像数据量大小=像素总数\times图像深度\div8     单位:BYTE

  例如:一副640x640的256色图像为640x480x8/8=307200字节。

三、数字图像处理的基本知识

1、数字图像处理的几个基本目的

  a) 以人为最终的信息接收者,其实主要目的是改善图像的质量

 b)以机器为对象, 目的是使机器或计算机能自动识别目标,称为图像识别

  c)利用计算机系统解释图像,实现类似人类视觉系统理解外部世界,被称为图像理解或计算机视觉。其正确的直接要有知识的引导,与人工智能等学科有密切联系。

 2、数字图像处理的基本特点

  • 处理的大多是二维信息,数据量大
  • 数字图像传输占用的频带较宽
  • 数字图像中像素间的相关性较大,冗余比较多,有利于压缩。
  • 数字处理技术综合性强
  • 图像信息理论与通信理论密切相关
  • 数字图像处理后很多情况是给人观察和评价的,因此受人的因素影响较大。

3、数字图像处理的主要研究内容

  a) 图像变换:如傅里叶变换、沃尔什变化、离散余弦变换等间接处理技术,将空间域的处理转换为变换域处理,不仅可以减少计算量,而且可以获得更有效的处理。目前小波变换在时域和频域中都具有良好的局部化特征,应用广泛。

                                                              (Matlab实现的傅里叶变换) 

  b)图像压缩编码:图像压缩编码技术可以减少图像的数据量,以便节省图像传输、处理时间和减少存储器容量。

  c)图像增强和复原:目的是提高图像的质量,如去除噪声、提高清晰度等。图像增强不考虑图像降质的原因,突出图像中感兴趣的部分。如强化图像高频分量,可使图像中物体轮廓清晰,细节明显。

              (图像复原)                                                                                           (图像增强)   

 d)  图像分割:图像分割是数字图像处理中的关键技术之一。图像分割是将图像中有意义的特征部分提取出来,其有意义的特征有图像中物体的边缘、区域等,这是进一步进行图像识别、分析和理解的基础。

e) 图像描述:图像描述是图像识别和理解的必要前提。二值图像可用几何特性描述:如边界描述和区域描述。

f)  图像分类:图像分类(识别)属于模式识别的范畴,其主要内容就是对图像经过某些出来后进行判决分类。

   图像分类常用方法:

  • 统计模式分类和句法模式分类
  • 模糊模式识别和人工神经网络模式分类  

4、数字图像处理的研究方法

  数字图像处理研究的两个不同层次

  • 人作为图像的接收者(Human readable)

         图像处理研究的目的(包括获取、传输、处理、再现等)为更好满足人类视觉感知的要求,帮助人类改善其视觉能力---传统的图像处理。

  • 计算机代替人作为图像的接收者(Machine readable) 

        由计算机实现人类视觉感知的功能,解决计算机视觉问题。利用模式识别、人工智能方法分析、理解和辨识图像的内容,解决图像认知问题。例如,图像分割文字识别、人体鉴别等问题。

2019-04-16 21:30:41 qq_37692302 阅读数 137

目录

 

一、数字图像表示

二、像素间的一些关系


一、数字图像表示

        一幅图像可以被定义为一个二维函数 f(x,y),其中 x 和 y是空间(平面)坐标,f在任何坐标点 (x,y) 处的振幅称为图像在该点的亮度。灰度是用来表示黑白图像亮度的一个术语,而彩色图像是由三幅单色图像(红、绿、蓝)组合形成的。因此,许多为黑白图像处理开发的技术适用于彩色图像处理,方法是分别处理三幅独立的分量图像即可。图像关于 x 和 y坐标以及振幅连续。要将这样的一幅图像转换成数字形式,就要求数字化坐标和振幅。
将坐标值数字化称为采样;将振幅数字化称为量化。因此,当 x 、y 和振幅都是有限且离散的量时,称该图像为数字图像

该式的两边以等效的方式定量的表示了一副数字图像,右边是一个实数矩阵,该矩阵中的每个元素称为图像单元、图像元素或像素。图像和像素这两个术语将在全书中表示数字图像及其元素。

灰度级数L=2^k,存储数字图像所需的比特数b为:b=M*N*k。通常灰度级为2^k的图像我们称为“k比特图像”!

  • 二、像素间的一些关系

相邻像素:

邻接性、连通性、区域和边界:

令S是图像中的一个像素子集。如果S的全部像素之间存在一个通路,则可以说两个像素p和q在S中是连通的。对于S中任何元素p,S中连通到该像素集称为S的连通分量。如果S仅有一个连通分量,则集合S称为连通集。

令R是图像中的一个像素子集。如果R是连通集,则称R为一个区域。在谈区域时,必须制定邻接的类型(4邻接或8邻接)。一个R的边界(也称为边缘或轮廓)是区域中像素的集合。
 

距离度量:

 

2018-02-01 21:23:36 github_30605157 阅读数 2834

OpenCV是学习数字图像处理的好工具,本专栏拟打算从对OpenCV源码的学习来研究数字图像处理中的基本操作。我开设本专栏不为别的,只希望能系统地学习OpenCV,并把我支离破碎的数字图像处理知识好好理一理。当然,最终还是为了我的毕设啦!这是我大学的最后一个作品了,我希望能有一个好的结果。

因此,本专栏的所有文章相当于我的学习笔记,内容仅供参考,也欢迎各位批评指正。

OpenCV

OpenCV是一个开源跨平台的计算机视觉函数库,它提供了各种图像处理的操作,我们可以不掌握数字图像处理的知识,就可以使用这个函数库,因此它为我们的编程提供了很大的便利。

笔者在以前在安装OpenCV时吃了不少苦头,遇到过各种各样的问题,这里也略作总结:

  • 与VS的版本兼容问题

由于OpenCV在更新,而VS也在更新,这就导致了二者很难保持一致。在OpenCV的路径中你会发现类似于这样的文件夹:

opencv-vs

其中“vc10”、“vc11”、“vc12”就分别对应VS的版本,即VS2010、VS2012、VS2013(vc14对应的是VS2015),倘若你下载的OpenCV中没有与你的VS对应版本的文件夹的话,那二者就不能兼容。

  • 程序的位数和编译模式问题

其实这实际上是配置上的问题了。下面是VS的“Property Manager”的配置窗口:

property-manager

这个窗口的信息很直观,就是说你有四种配置方式:Debug编译模式+32位程序、Debug编译模式+64位程序、Release编译模式+32位程序、Release编译模式+64位程序。所以配置的时候,你需要注意选择合适的路径和动态链接库,如你想配置Debug编译模式+32位程序,你就需要选择x86的文件夹和后面带有d的动态链接库了。

x86

debug

当然,配置正确了也不能保证万事大吉,你还需要在VS中设置编译模式:

build-mode

这里需要和前面的配置保持一致。

上面我就总结了两种比较常见也比较致命的问题,其他细节问题这里就不赘述了。

在本专栏中,我拟打算学习一下OpenCV中某些部分的源码,另外也会介绍一些函数的原理,当然这就很可能涉及到数字图像处理方面的知识了。

数字图像处理

关于数字图像处理的介绍可以参考经典的图像处理的图书,如冈萨雷斯的《数字图像处理》一书。其中这样介绍数字图像处理:

数字图像处理是指借助于数字计算机来处理数字图像。注意,数字图像是由有限数量的元素组成,每个元素都有一个特定的位置和幅值。

其中,对数字图像处理的历史、相关领域等做了详细的介绍,感兴趣的可以去看看。

专栏图片

专栏还需要上传一张图片,我不知道要选什么图片,就将OpenCV安装路径中的几个图片经过缩放、组合成了一张长图上传到了上面。

// column_intro.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>

using namespace cv;
using namespace std;

int main(int argc, char **argv)
{
    if (argc < 2)
    {
        cout << "No arguments found!" << endl;
        return -1;
    }
    //cout << argc << endl;
    float frame_wd = 1110, frame_hg = 170;
    Mat frame = Mat::zeros(frame_hg, frame_wd, CV_8U);

    Mat scale_mat = Mat::zeros(2, 3, CV_32FC1);
    float scale_factor;
    Mat img, rst;
    // the distance of every image move in loop
    float pitch = 0.0;

    for (int i = 0; i < argc - 1; i++)
    {
        img = imread(argv[i + 1], CV_LOAD_IMAGE_GRAYSCALE);
        // get scale factor
        scale_factor = frame_hg / img.size().height;
        // get scale matrix
        scale_mat.at<float>(0) = scale_factor;
        scale_mat.at<float>(4) = scale_factor;
        // get size of result
        Size sz(img.size().width * scale_factor,
            img.size().height * scale_factor);
        warpAffine(img, rst, scale_mat, sz);

        if (pitch + rst.size().width < frame.size().width)
        {
            rst.copyTo(frame(Rect(pitch, 0, rst.size().width, frame_hg)));
            pitch += rst.size().width;
        }
        else
        {
            rst(Rect(0, 0, frame_wd - pitch, frame_hg)).
                copyTo(frame(Rect(pitch, 0, frame_wd - pitch, frame_hg)));
        }
    }

    // write the result into file
    imwrite("result.png", frame);
    return 0;
}

在我的github或者gitee里可以下载该代码。

很久没有写博客了。作为我的2018年第一篇博客,内容可能有点儿仓促,后面我会根据实际需要进行适当改动。

参考资料

  1. 数字图像处理,冈萨雷斯,电子工业出版社
  2. 维基百科:OpenCV

数字图像处理学习

阅读数 156

没有更多推荐了,返回首页