Python 计算机视觉(三)—— 数字图像处理基本操作
目录
1. 读取显示图像
(1)读取图像
cv2.imread() 函数
image.open() 函数
(2)显示图像
cv2.imshow()函数
img.show()函数
2. 读取修改像素
(1)读取像素
print(img.shape)函数
print(img.size)函数
print(img)函数
使用 numpy 库
像素值不同的原因
(2)修改像素
3. 保存图像
(1)使用 PIL 库
(2)使用 OpenCV 库
4. 获取图像属性
总结
1. 读取显示图像
读取显示这部分在前面已经记录过了,在这里我们简单过一下: Python 计算机视觉(二) —— OpenCV 基础
(1)读取图像
cv2.imread() 函数
import cv2
img1 = cv2.imread('E:\Python\StudyOfOpencv\qilin1.jpeg')
注意路径中不能包含有中文以及一些莫名其妙的空格哦 ,不然会报错
imread() 函数不仅仅只有一个图像路径的参数 ,路径后面还有一个 flag 参数可以决定读入的图像的颜色类型
至于该参数可选取的值以及意义如下:
IMREAD_ANYCOLOR = 4 #读取彩色图像
IMREAD_ANYDEPTH = 2 #读取灰度图像
IMREAD_COLOR = 1 #读取彩色图像
IMREAD_GRAYSCALE = 0 #读取灰度图像IMREAD_IGNORE_ORIENTATION = 128
IMREAD_LOAD_GDAL = 8
IMREAD_REDUCED_COLOR_2 = 17
IMREAD_REDUCED_COLOR_4 = 33
IMREAD_REDUCED_COLOR_8 = 65IMREAD_REDUCED_GRAYSCALE_2 = 16
IMREAD_REDUCED_GRAYSCALE_4 = 32
IMREAD_REDUCED_GRAYSCALE_8 = 64IMREAD_UNCHANGED = -1
至于其他的一些参数的意义可以自己去尝试得到输出进行观察
image.open() 函数
使用该方法读取到的是图片本身
from PIL import Image
安装 PIL 库时可能会报错,试着安装 Pillow-PIL
from PIL import Image
img2 = Image.open('E:\Python\StudyOfOpencv\qilin2.jpeg')
(2)显示图像
cv2.imshow()函数
使用 imread 函数读取图像,显示图像使用 cv2.imshow() 函数,但需要创建显示窗口,在窗口中显示图像,这些我也在前面的那篇文章中提到过
import cv2
img1 = cv2.imread('E:\Python\StudyOfOpencv\qilin1.jpeg') #读取图像
cv2.namedWindow("Qilin")
cv2.imshow("Qilin", img1) #显示图像
cv2.waitKey(delay = 0)
得到图像显示:
img.show()函数
使用的是 Image.open() 函数读取图像,则需要用该函数显示图像,不需要创建窗口
img.show() 中的 img 是图像名称,需要进行修改
from PIL import Image
img2 = Image.open('E:\Python\StudyOfOpencv\qilin2.jpeg') #读取图像
img2.show() #显示图像
使用该函数打开图像可能会报错,提示没有对应软件打开文件
解决方法:打开设置-->应用 --> 默认程序 --> 选择报错的文件后缀为其添加默认的应用软件
得到图像显示:
在此处是用图像软件打开的,原因就是上面提到的需要为该文件添加默认打开软件
2. 读取修改像素
(1)读取像素
print(img.shape)函数
使用 cv2.imread() 函数读取图像后,为显示图像的类型以及分辨率可以使用该函数
print(img1.shape)
得到输出:(506, 564, 3)
说明该图像是 564*506 的三通道 图像,至于分辨率为什么反过来后面再说
print(img.size)函数
使用 Image.open() 得到图像后使用该函数输出图像的大小,即分辨率
print(img2.size)
得到输出:(564, 506)
可以看出刚好和前面的是反过来的
print(img)函数
使用 cv2.imread() 函数得到的图像要用该函数输出像素值:
print(img1)
[[[254 251 253]
[254 251 253]
[254 251 253]
...
[245 236 227]
[245 236 227]
[245 236 227]][[254 251 253]
[254 251 253]
[254 251 253]
...
[245 236 227]
[245 236 227]
[245 236 227]][[254 251 253]
[254 251 253]
[254 251 253]
...
[245 235 228]
[245 235 228]
[245 235 228]]...
[[ 45 62 71]
[ 44 62 69]
[ 44 61 70]
...
[ 32 46 42]
[ 32 46 42]
[ 32 46 42]][[ 41 57 64]
[ 41 57 63]
[ 41 57 64]
...
[ 27 41 37]
[ 32 46 42]
[ 31 45 41]][[ 43 57 63]
[ 43 57 63]
[ 43 57 63]
...
[ 27 41 37]
[ 32 46 42]
[ 31 45 41]]]
使用 numpy 库
前面提到过,使用 Image.open() 函数得到的图象是原始的图像,所以需要将它转化为数组形式再进行输出得到相应的像素点值
from PIL import Image
import numpy as np
img2 = Image.open('E:\Python\StudyOfOpencv\qilin1.jpeg')
image = np.asarray(img2)
print(image)
[[[253 251 254]
[253 251 254]
[253 251 254]
...
[227 236 245]
[227 236 245]
[227 236 245]][[253 251 254]
[253 251 254]
[253 251 254]
...
[227 236 245]
[227 236 245]
[227 236 245]][[253 251 254]
[253 251 254]
[253 251 254]
...
[228 235 245]
[228 235 245]
[228 235 245]]...
[[ 71 62 45]
[ 69 62 44]
[ 70 61 44]
...
[ 42 46 32]
[ 42 46 32]
[ 42 46 32]][[ 64 57 41]
[ 63 57 41]
[ 64 57 41]
...
[ 37 41 27]
[ 42 46 32]
[ 41 45 31]][[ 63 57 43]
[ 63 57 43]
[ 63 57 43]
...
[ 37 41 27]
[ 42 46 32]
[ 41 45 31]]]
像素值不同的原因
通过两种不同的函数得到的图像读取的像素刚好是反过来的这是因为:cv2.imread() 读取的是 BGR 格式,而 Image.open() 读取的是 RGB 格式,所以它们两者的 Red&Blue 通道刚好反过来了
而且使用 cv2.imread() 函数得到的图像本来就是经过采样的,所以可以直接打印分辨率,然而 image.open() 函数得到的图像则是原本的图像,所以需要将其转化为数组形式才能打印分辨率
(2)修改像素
要将图像修改为灰度图,那么在 OpenCv 库中使用 cvtColor() 函数就可以实现,这在上一篇文章中提到过
但如果是使用 Image.open() 库得到的图像,则需要对每一个像素点的像素值进行调整
img2 = Image.open('E:\Python\StudyOfOpencv\qilin1.jpeg')
pix = img2.load() #导入像素
width = img2.size[0] #获取宽度
height = img2.size[1] #获取长度
temp = 1
for x in range(width): #遍历宽度temp += 1for y in range(height): #遍历长度if temp % 2 == 0: #每隔一个像素点转化为一个白点img2.putpixel((x, y), (255, 255, 255))
img2.show()
得到图像如上
3. 保存图像
(1)使用 PIL 库
(之前的图案因为不明原因违规取消了,现在换个图片,但愿不会再次违规)
对于上面的得到的图像使用 img2.save() 函数就可以进行保存:
img2.save('E:\Python\StudyOfOpencv\qilin1_1.jpeg')
(2)使用 OpenCV 库
首先我们将图像转化为灰度图像:
img1 = cv2.imread('E:\Python\StudyOfOpencv\qilin1.jpeg')
cv2.namedWindow("Qilin")
img_gray = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY) #对图像进行灰度处理
cv2.imshow("Qilin", img_gray)
得到的灰度图像如下:
再将其保存:
cv2.imwrite('E:\Python\StudyOfOpencv\qilinone.jpeg', img_gray)
如果报错了检查一下是否在保存路径中忘了添加图像后缀
4. 获取图像属性
使用 cv2.imread() 函数读取图像后,为显示图像的类型以及分辨率可以使用 print(img.shape), 前面提到过,这里就不赘述了
也提到过 print(img.size) 当然这适用于使用 Image.open() 得到的图像
总结
这篇文章主要承接了上一篇文章 —— OpenCV 基础,记录了其他的几种显示图像,保存图像、观察图像特性的方法,主要也是为后面的学习打下基础
Python 计算机视觉(三)—— 数字图像处理基本操作相关推荐
- 计算机图像处理实验报告四西南大学,计算机图像处理实验报告(数字图像处理基本操作)...
西南大学 工程技术学院学生实验报告 课程名称: 计算机图像处理 实验名称: 实验一 数字图像处理基本操作 一.实验目的 (1)掌握MATLAB软件的运用,熟练掌握建立.保存.运行.调试m文件的方法. ...
- matlab空域滤波,MATLAB数字图像处理基本操作及空域滤波
MATLAB数字图像处理基本操作及空域滤波 实验一 MATLAB 数字图像处理基本操作及空域滤波实验目的1.了解有关数字图像处理的基本概念,熟悉Matlab软件中关于数字图像处理的基本命令,掌握利用M ...
- 【计算机视觉】数字图像处理(三)—— 图像变换原理分析
数字图像处理(三)-- 图像变换原理分析 一.图像变换的目的与用途 1. 图像变换的目的 2. 图像正交变换的要求 正交变换的应用 (一).傅里叶变换 1.傅里叶变换的理论基础与基本定义 2.连续函数 ...
- 何为计算机视觉?计算机视觉与数字图像处理的区别、Opencv的起源。
目录 概述 一. 什么是计算机视觉? 二.计算机视觉实现起来难吗? 1. 外部噪声: 2.内部噪声(分为四种): 3.网络噪声 4.根据特征切割场景 重建二维图 1. opencv还可以很好的修复图像 ...
- 数字图像处理与python实现_数字图像处理学习(2)—— 图像直方图均衡与图像匹配(python实现)...
数字图像处理学习(2)-- 直方图均衡与图像匹配 1. 直方图均衡(Histogram Equalization) 1.1 直方图均衡化概念 1.2 直方图均衡实现简单思路 1.3 直方图均衡实现代码 ...
- 【计算机视觉】数字图像处理(四)—— 图像增强
数字图像处理(四)-- 图像增强 图像增强的定义 图像增强方法 一.图像增强的点运算 (一)灰度变换 1. 线性变换 2. 分段线性变换 3. 非线性灰度变换 对数变换 指数变换 (二) 直方图修整法 ...
- 基于MATLAB的数字图像处理基本操作
实验一:图像增强 实验名称:图像增强 实验目的:1.熟悉图像在Matlab下的读入,输出及显示: 2.熟悉直方图均衡化: 3.熟悉图像的线性指数等: 4.熟悉图像的算术运算及几何变换. 实验原理: 图 ...
- 【计算机视觉】数字图像处理(六)—— 图像压缩
数字图像处理(六)-- 图像压缩 一.图像压缩概述 (一).图像编码技术的研究背景 1. 信息信息传输方式发生了很大的改变 2. 图像传输与存储需要的信息量空间 (1)彩色视频信息 (2)传真数据 3 ...
- 【计算机视觉】数字图像处理(二)—— 图像数字化特征介绍
数字图像处理(二)-- 图像数字化特征介绍 前言 一.图像的数字化 数字图像的表示 图像数字化过程 1. 采样 2. 量化 3. 采样与量化的作用效果 图像数字化设备 二.数字图像处理算法的形式 基本 ...
最新文章
- Java并发系列—工具类:CountDownLatch
- 基于云的CRM系统到底好在哪里?
- 日常SQL常见问题(二)
- xgboost算法_陈天奇做的XGBoost为什么能横扫机器学习竞赛平台?
- 蒋金楠:200行代码7个对象《ASP.NET Core框架揭密》苏州.NET俱乐部课程分享
- 【通信原理课程设计】8PSK调制解调技术的设计与仿真(MATLAB)
- oracle 账户 锁定 密码忘记了,Oracle System密码忘记 密码修改、删除账号锁定lock
- winform学习之-----页面设计-20160523
- JAVA项目之图书管理系统
- 《Java游戏编程原理与实践教程》读书笔记(第4章——Java游戏程序的基本框架)
- 实验7-3-8 输出大写英文字母
- 微信开发带参数的二维码
- 软件架构模式之管道-过滤器模式--分析
- 怎么设计计算机网络共享,怎么设置网络共享?教大家两种设置共享网络的方法...
- 北京3月去哪玩 赏花踏青登山六大推荐
- excel最大行数各版本介绍
- 大M法的介绍以及建模过程中if else的实现
- 浅谈HTTP 和 HTTPS的区别
- wwbizsrv.exe-应用程序错误
- 培训直播平台这些功能是必不可少的
热门文章
- S/4 HANA – 是ERP皇帝的新装,还是SAP王国的新基石
- SAP配置webdynpro完全手册 .
- ABAP SUBMIT 程序时带屏幕默认值
- SAP中差异的一些概念
- 万亿市场下,电商代运营还需另求“第二曲线”
- bat php 监控网站,HTML_进程监控实现代码[vbs+bat],运行后会在%windir%\system32\目录 - phpStudy...
- python常用库教程_这几个python常用的库你必须知道!
- pypypy python_聊聊Python中的pypy
- 【Python教程】常见字符串去除空格的教程
- python实现进度条的3种方式