⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟
🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号:不懂开发的程序猿
个人网站:https://jerry-jy.co/❗❗❗知识付费,🈲止白嫖,有需要请后台私信或【文末】个人微信公众号联系我
基于OpenCv的图像基本操作
- 基于OpenCv的图像基本操作
- 任务需求
- 任务目标
- 1、掌握图像的读取、显示和保存
- 2、掌握图像的ROI区域提取
- 3、掌握图像的颜色通道提取
- 4、掌握图像的色彩空间转换
- 任务环境
- 1、jupyter开发环境
- 2、OpenCv
- 3、python3.6
- 任务实施过程
- 一、图像的读取、显示和保存
- 1、图像读取
- 2、图像显示
- 3、图像保存
- 二、图像的ROI区域
- 三、图像的颜色通道提取
- 四、图像的色彩空间转换
- 五、任务小结
- 说明
基于OpenCv的图像基本操作
任务需求
本实验主要完成基于OpenCv的图像的基本操作、图像的ROI区域提取以及图像的色彩空间转换
- 图像的基本操作包括图像的读取、显示和保存。
- 图像的ROI区域提取表示图像感兴趣的区域提取,也就是最能表现图像内容的区域,图像ROI提取技术广泛应用于压缩编码、图像检索,目标检测等。
- 通常需要根据实际应用环境选择合适的颜色空间,数字图像处理中常用的颜色空间有RGB,YUV,HSI等,它们具有不同的特性和适用范围,相互之间存在一定的转换关系,可根据实际需要进行相互转换
任务目标
1、掌握图像的读取、显示和保存
2、掌握图像的ROI区域提取
3、掌握图像的颜色通道提取
4、掌握图像的色彩空间转换
任务环境
1、jupyter开发环境
2、OpenCv
3、python3.6
任务实施过程
一、图像的读取、显示和保存
1、图像读取
cv2.imread(path, flag) 从指定的文件加载图像,如果无法读取图像,则返回一个空矩阵。
参数:
- path:一个字符串,代表要读取的图像的路径。
- flag:它指定应该读取图像的方式。默认值为cv2.IMREAD_COLOR
- cv2.IMREAD_COLOR:彩色图像
- cv2.IMREAD_GRAYSCALE:灰度图像
import cv2 # 导入opencv
import matplotlib.pyplot as plt # 导入绘图模块
import numpy as np # 导入numpy库
# 绘制图像直接展示,不用调用plt.show()
%matplotlib inline
# 用来正常显示中文标签
plt.rc('font',family="SimHei")
# 读取图像,这里读取的是彩色图像
img = cv2.imread(r'./experiment/data/Doraemon.jpg')
# 显示读取的图像,读取到的是一个三维矩阵
print(img)
# 查看矩阵的形状
print('矩阵形状',img.shape)
print('图像高x宽x通道数的总个数',img.size)
2、图像显示
cv2.imShow(wname,img)函数可以在窗口中显示图像。该窗口和图像的原始大小自适应(自动调整到原始尺寸)。
- wname:是窗口的名字
- img:要显示的图像
- cv2.waitKey:等待键盘输入,单位为毫秒,参数为0表示无限等待。
- cv2.destroyAllWindow():能正常关闭所有的绘图窗口
# # 图像的显示,也可以创建多个窗口,但窗口的名字必须不同
# cv2.imshow('image',img)
# # 等待时间,毫秒级,0表示任意键终止
# cv2.waitKey(0)
# cv2.destroyAllWindows()
本实验环境使用opencv库不能显示图像,所以使用matplotlib模块显示图像,定义显示图像函数
# 使用matplotlib显示图像
# 定义一个显示图像的函数
def im_show(name,img):
# 若图像的矩阵是三维的那么绘制彩色图像
if img.ndim==3:
# opencv图像读取的格式是BGR,将其转成RGB
img = img[:,:,::-1]
# 可以使用plt.imshow()显示图像
plt.imshow(img)
plt.title(name)
# 不显示x轴和y轴
plt.xticks([])
plt.yticks([])
# 若图像的矩阵是二维的那么绘制灰度图
elif img.ndim==2:
# cmap='gray'表示绘制灰度图像
plt.imshow(img,cmap='gray')
plt.title(name)
# 不显示x轴和y轴
plt.xticks([])
plt.yticks([])
else:
print('NONE')
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
# 显示读入的图像
im_show('image',img)
3、图像保存
# 首先通过numpy创建一个长、宽各为300的矩阵,设置数据格式为uint8
img1 = np.mat(np.zeros((300,300)),dtype = np.uint8)
img1
# 显示图像,得到一张全黑的图像
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
im_show('image1',img1)
# 得到的图像矩阵是二维的
img1.shape
# 利用ndarray数组的操作来修改图片的颜色
# 对图片画横、竖两条白线
# 设图像第10行和第10列的像素值为255
img1[:,10] = 255
img1[10,:] = 255
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
# 显示图像
im_show('image3',img1)
cv2.imwrite(file,img,num) 图像保存函数
- file:要保存的文件名
- img:要保存的图像
- num:它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3
# 保存图像
cv2.imwrite('black.jpg',img1)
二、图像的ROI区域
在图像处理领域,感兴趣区域(ROI) 是从图像中选择的一个图像区域,这个区域是你的图像分析所关注的重点。ROI区域意为截取部分图像数据,表示感兴趣的区域。
# 通过数组使用索引或者切片,选择感兴趣的像素点/区域
# 截取显示图片中的人物大雄
dx = img[0:200,0:200]
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
im_show('image4',dx)
三、图像的颜色通道提取
一张彩色图像由三个彩色图像分量组合成。通过RGB(红色、绿色、蓝色)三种颜色分量的叠加来得到各种颜色。
# 使用cv2.split()进行通道拆分,注意opencv的顺序是BGR
b,g,r=cv2.split(img)
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
im_show('红色通道灰度图',r)
print('红色通道矩阵形状',r.shape)
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
im_show('绿色通道灰度图',g)
print('绿色通道矩阵形状',g.shape)
# 设置绘制图像的画布大小
plt.figure(figsize = (6,6))
im_show('蓝色通道灰度图',b)
print('蓝色通道矩阵形状',b.shape)
四、图像的色彩空间转换
OpenCV提供了150多种颜色空间转换方法。本次实验中我们只研究BGR向RGB、Gray、HSV的转换。
cv.cvtColor(input_image,flag)颜色空间转换函数
- input_image:需要转换的图片
- flag:转换成何种格式
- cv2.COLOR_BGR2RGB:BGR→RGB转换
- cv2.COLOR_BGR2GRAY:BGR→Gray转换
- cv2.COLOR_BGR2HSV:BGR→HSV转换
# 将图像img转换成三种色彩空间:RGB、GRAY、HSV
img_rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
img_hsv = cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
# 设置子图的标题和子图显示的图片
images = [img, img_rgb, img_gray, img_hsv]
titles = ['BGR', 'RGB', 'GRAY', 'HSV']
# 设置绘制图像的画布大小
plt.figure(figsize = (12,12))
# 绘制4幅子图
for i in range(4):
plt.subplot(2, 2, i + 1)
if images[i].ndim ==3:
# 可以使用plt.imshow()显示图像
plt.imshow(images[i])
plt.title(titles[i])
# 不显示x轴和y轴
plt.xticks([])
plt.yticks([])
# 若图像的矩阵是二维的那么绘制灰度图
elif images[i].ndim==2:
# cmap='gray'表示绘制灰度图像
plt.imshow(images[i],cmap='gray')
plt.title(titles[i])
# 不显示x轴和y轴
plt.xticks([])
plt.yticks([])
plt.tight_layout()
五、任务小结
本实验主要完成基于OpenCv的图像的基本操作(图像的读取、显示和保存)、图像的ROI区域提取以及图像的色彩空间转换。
通过本次实验需要掌握以下内容:
- 1.掌握图像的读取、显示和保存
- 2.掌握图像的ROI区域提取
- 3.掌握图像的颜色通道提取
- 4.掌握图像的色彩空间转换
–end–
说明
本实验(项目)/论文若有需要,请后台私信或【文末】个人微信公众号联系我