处理是计算机技术及其相关学科的重要内容,但是数字图像处理的实践却往往因软件平台的限制而难以展开,本文采用简单易学,应用广泛的python语言,演示了数字图像处理的一般方法。

本文主要论述图片的存储结构、读取、保存、分割、拼接、合成,进一步的内容将在以后推送。

1.准备工作

本文使用python的numpy和matplotlib库演示数字图像的处理。在进行操作之前,需要先配置好运行环境。本文采用的运行环境为python3.9.0加VS Code。

在程序开头要声明所使用的库:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

同时还要准备实验材料,即一张jpg格式的图片:

2.图像的读取、显示和保存

2.1图像的读取和保存

使用matplotlib.image中的函数可以轻松实现图片的读取和保存。

img=mpimg.imread('kite.jpg')#打开文件
mpimg.imsave('kite2.jpg',img)#保存文件

2.2图像数据查看

使用print()方法,可以看到图片以三位数组的形式记录图像数据。使用.shape方法可以获取三维数组的行数、列数和深度。对于BIP类型的图像文件,数组的最外层元素数量代表图像的高度,第二层数组元素数量代表图像的宽度,最里层数组元素数量代表波段数。

输入如下:

print(img)
height,width,bands=img.shape
print('图像高度为',height,'\n宽度为',width,'\n波段数为',bands)

输出如下:

[[[[253 253 253][253 253 253][253 253 253]...[253 253 253][253 253 253][253 253 253]]...[[253 253 253][253 253 253][253 253 253]...[253 253 253][253 253 253][253 253 253]]]
图像高度为 225
宽度为 211
波段数为 3

2.3图像的显示

图像的显示使用如下方法即可:

plt.imshow(img)
plt.show()

3.图像分割与波段分离

3.1数组索引和切片

经过前面的实验发现,栅格图像数据是以类似多维数组的方式存储的,因此可以采用数组操作的方法对图片进行处理。这里先学习一下数组的切片方法:

一维数组的索引和切片

例程如下:

a=[0,1,2,3,4,5,6]
print(a[2])#显示第2位的元素(序号从0开始)
print(a[2:4])#显示第2位到第4位的元素(不包含第4位)
print(a[2:])#显示第2位以后的元素
print(a[:2])#显示第2位以前的元素(不包含第2位)
print(a[:])#显示全部元素

输出如下:

2
[2, 3]
[2, 3, 4, 5, 6]
[0, 1]
[0, 1, 2, 3, 4, 5, 6]

二维数组的索引和切片

二维数组可以以如下方式进行创建和使用:

a=[[1,2,3],[4,5,6],[7,8,9]]
print(a[1][1])
print(a[:][1])
print(a[1][:])

输出结果如下:

5
[4, 5, 6]
[4, 5, 6]

这时发现对二维数组只能进行取“行”操作,而不能进行取“列”操作,因此需要引入numpy库中的array对象:

b=np.array(a)
#创建np.array对象b,取代数组a
print(b[1][1])
print(b[:,1])
#取所有行中的第1位元素,即取单列
print(b[1,:])
#取第1行,并取该行所有元素

输出结果如下

5
[2 5 8]
[4 5 6]

3.2图像分割

有了对多维数组的分割方法,即可像处理一般数组一样对图像进行处理:

如截取左上角100×100像素的图片:

img=mpimg.imread('kite.jpg')
new_img=img[:100,:100,:]
#取第100行以前、第100列以前,并保留所有波段
mpimg.imsave('cuted_kite.jpg',new_img)

输出结果:

3.3波段分离

波段的分离同样采用多维数组切片的方法进行:

img=mpimg.imread('kite.jpg')
red_img=img[:,:,0]
#第三维度的索引0,1,2分别代表Red、Green、Blues三个通道的灰度值
mpimg.imsave('red_kite.jpg',red_img)

matplotlib会自动对灰度图像进行伪彩色变换,输出结果如下:

4.图像合并和多波段叠加

numpy中提供了三个数组合并的方法:

  • hstack:水平拼接,沿着行的方向,对列进行拼接;

  • vstack:垂直拼接,沿着列的方向,对行进行拼接;

  • dstack:沿着第三个轴(深度方向)进行拼接。

这三个方法也可以用于图像的处理。

4.1图像拼接

图像拼接前需要保证图像的宽度或高度一致,并且波段数一致。

img=mpimg.imread('kite.jpg')
img1=img[:100,:,:]   #取第100行以前
img2=img[150:,:,:]   #取第150行以后
new_img=np.vstack((img1,img2))
#垂直拼接,注意括号有两层
mpimg.imsave('new_img.jpg',new_img)

效果如下:

4.2多波段合成

下面演示了多波段假彩色合成方法:

img=mpimg.imread('kite.jpg')
red_img=img[:,:,0]#提取红光波段
green_img=img[:,:,1]#提取绿光波段
blue_img=img[:,:,2]#提取蓝光波段
new_img=np.dstack((red_img,blue_img,green_img))
#交换Blue波段和Green波段,进行合成
mpimg.imsave('new_img2.jpg',new_img)

效果如下:

数字图像处理实践(一)相关推荐

  1. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part3

    本文系<数字图像处理原理与实践(MATLAB版)>一书之代码系列的Part3,辑录该书第135至第184页之代码,供有需要读者下载研究使用.代码执行结果请参见原书配图. --------- ...

  2. 酉变换 matlab,数字图像处理:原理与实践(MATLAB版)

    数字图像处理:原理与实践(MATLAB版) 作 者:左飞 著 出版时间:2014 内容简介 本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像分割.图像去噪. ...

  3. TIT 数字图像处理 原理与实践(MATLAB) 入门教学 实验一 常用的MATLAB图像处理命令与图像基本操作

    文章目录 数字图像处理 原理与实践(MATLAB) 入门教学 实验一 常用的MATLAB图像处理命令与图像基本操作 实验要求 知识点 实验内容 1.读入一幅RGB图像,变换为灰度图像和二值图像,并在同 ...

  4. 关于《Java数字图像处理-编程技巧与应用实践》一书 源代码

    关于<Java数字图像处理-编程技巧与应用实践>一书 源代码 本书所有的源代码我已经整理上传到华章图书的官方网站与 我自己的GITHUB上,本人GITHUB的地址如下: https://g ...

  5. 数字图像处理原理与实践(MATLAB版)勘误表

    本文系<数字图像处理原理与实践(MATLAB版)>一书的勘误表. [内容简介]本书全面系统地介绍了数字图像处理技术的理论与方法,内容涉及几何变换.灰度变换.图像增强.图像分割.图像去噪.小 ...

  6. TIT 数字图像处理 原理与实践(MATLAB) 入门教学 实验三 图像平滑与图像锐化

    文章目录 数字图像处理 原理与实践(MATLAB) 入门教学 实验三 图像平滑与图像锐化 实验要求 知识点 实验内容 1.采用二维中值滤波函数medfilt2对受椒盐噪声干扰的图像滤波,窗口分别采用3 ...

  7. 数字图像处理matlab实践

    目录 一.任务描述 3 二.设计思路 3 三.功能模块 3 1 图像灰度化 3 2 图像二值化 4 3 图像叠加 5 4 图像目标检测 5 5 图像对数变换 6 6 图像指数变换 7 7 图像直方图均 ...

  8. MOOC网神经网络与深度学习TensorFlow实践3——数字图像处理、TensorFlow基础

    数字图像处理 数字图像基本概念 pillow图像处理库 手写数字数据集MNIST TensorFlow基础 TensorFlow2.0特性 创建张量 维度变换 部分采样 张量运算

  9. DDA应用实践-冈萨雷斯《数字图像处理》

    MD在线建档:2/27/2016 5:24:37 PM by Jimbowhy CSDN下载:http://download.csdn.net/detail/winsenjiansbomber/944 ...

  10. 结合实例与代码谈数字图像处理都研究什么?

    图像处理(以及机器视觉)在学校里是一个很大的研究方向,很多研究生.博士生都在导师的带领下从事着这方面的研究.另外,就工作而言,也确实有很多这方面的岗位和机会虚位以待.而且这种情势也越来越凸显.那么图像 ...

最新文章

  1. java flash截图_求大神们帮助, 如何在java中实现文字数据转换成图片或flash显示
  2. OPPO正式公布ColorOS 6系统:Reno新机4月10日首发适配
  3. 几何画板自定义工具_几何画板sketchpad下载-几何画板sketchpad免费版下载v5.0.6.5
  4. 粤教版小学认识计算机教案,粤教版八年级信息技术下册教案:第一章第一节初识计算机程序oc.pdf...
  5. React系列--jsx语法及虚拟dom,渲染
  6. Java内存模型基础知识
  7. [2018.08.09 T3] 几何题
  8. 陈新河:软件定义世界,数据驱动未来
  9. 风景怡人一个生态村子 -国稻种芯-百色:华润谋定希望小镇
  10. 专利与论文-6:《专利权利要求书》的撰写与注意事项
  11. VR全景智慧城市三维实景的建设和呈现目标
  12. html 导出 excel 列宽,Html2Excel 更名为 MyExcel,2.1.0 版本发布!
  13. ppt画图画不下——调整ppt页面的大小
  14. 知道IP入侵个人的电脑
  15. “DOTA“巨魔战将连续晕眩的概率
  16. git拉取代码出现Unpacking objects
  17. ffmpeg 设置网络代理_MAC下使用SSH设置代理的办法
  18. 在线书架html代码大全,在线书架
  19. 关于计算机重新启动处于挂起状态的问题解决
  20. 远程桌面控制软件,远程桌面控制软件哪个更好用,怎么使用呢

热门文章

  1. 青岛大学计算机科学技术学院几本,郝蓉-青岛大学计算机科学技术学院
  2. LinkedList常用方法笔记
  3. Vue:vue组件生命周期
  4. 标定_基于目标的激光雷达与相机外参标定方法汇总
  5. 【一天一个C++小知识】011.C++编译的流程
  6. 分布式存储系统学习笔记(一)—什么是分布式系统(6)—2PC和Paxos协议
  7. freemarker【FTL】常见语法大全
  8. Centos下安装Mongodb
  9. 简单聊一下const
  10. linux 常见压缩归档命令