opencv 常用函数总结

文章目录

一、图像的读入、显示和保存

1.1 读入图像

1.1.1 imread():读入图像

使用 imread() 函数,用于读入图像
调用格式:
retval = cv2.imread(文件名[,显示控制参数])
函数说明:
① 文件名:是包含(绝对或相对)路径的文件名(包含文件后缀名)
② 控制参数(可选):可以指定图像显示的类型(更多参数参见官网文档)
a) cv2.IMREAD_UNCHANGED:会原样读入图像的格式,不添加则会将所有读入的图像转换为BGR彩色图像(即使读入的是灰度图像)
b) cv2.IMREAD_GRAYSCALE
c) cv2.IMREAD_COLOR
③ 该函数返回,图像的矩阵对象


1.2 显示图像

1.2.1 imshow():在图像窗口中显示图像

使用 imshow() 函数,用于在图像窗口中显示图像
调用格式:
None= cv2.imshow(窗口名,图像名)
函数参数说明:
① 窗口名:对应 创建图像窗口是的自命名的名称
② 图像名:对应于 imread()获取的图像
③ 该函数没有返回值


1.2.2 waitKey():设置图像显示的时间

使用 waitKey() 函数,用于设置图像显示的时间
调用格式:
retval = cv2.waitKey(,[delay])
函数参数说明:
① delay(可选):表示 图像显示的时间(传入数字型数据)
a) delay > 0 等待delay毫秒
b) delay < 0 等待键盘单击
c) delay = 0 无限等待(一般传入的值,可手动关闭窗口)
② 该函数没有返回值


1.2.3 destoryAllWindows():删除所有的图像窗口

使用 destoryAllWindows() 函数,用于删除所有的图像窗口(删除内存中数据)
调用格式:
cv2.destoryAllWindows()


1.3 保存图像

1.3.1 imwrite():保存图像

使用 imwrite() 函数,用于保存图像
调用格式:
retval = cv2.inwrite(文件地址,文件名)
函数参数说明:
① 文件地址:需要传入 绝对路径并精确到保存的 文件名.后缀名
② 文件名:传入要保存的图像变量
③ 该函数没有返回值

# eg
import cv2
cv2.imwrite('D:\\test.jpg',img)

二、像素处理

2.1 使用opencv常规方式进行像素处理

2.1.1 对单个像素进行读取、修改操作

使用 “像素 = 图像[行索引,列索引]”(注意:行、列索引均从0开始计数) 可以访问图像中的 指定像素,也可以通过该形式对像素值进行修改

# 对于灰度图像
p = img[88,142] # 读取指定位置的像素值
print(p)
img[88,99] = 255 # 对指定位置的像素进行赋值

# 对于BGR图像
bule = img[78,125,0] # 获取读取指定位置的像素BGR中蓝色通道的值
green = img[78,125,1] # 获取读取指定位置的像素BGR中绿色通道的值
red = img[78,125,2] # 获取读取指定位置的像素BGR中红色通道的值
# 或
p = img[78,125] # 获取读取指定位置的像素值,此处返回的是三维列表
img[88,99] = [255,255,255] # 对指定位置的像素进行赋值

2.1.2 对连续的多个像素进行读取、修改操作

使用 “像素 = 图像[行起始索引:行结束索引,列起始索引:列结束索引]”(注意:行、列索引均从0开始计数,结束索引为实际截取的后一个索引) 可以访问图像中的 指定像素,也可以通过该形式对像素值进行修改

# 获取指定区域内的所有像素序列
p = img[0:5,0:5] # 获取图像左上角 5*5 区域的 3维像素序列

# 修改指定区域内的所有像素的值
p = img[0:5,0:5] = 0 # 对于彩色图像传入三维序列(即指定为BGR值),将会对该区域每一个像素均赋值为[0,0,0]

2.2 使用numpy进行像素处理

2.2.1 item():读取像素

使用 item() 函数,用于读取像素
调用格式:
图像.item(行索引,列索引)
函数参数说明:
① 行索引:对应像素的行号(从0开始)
② 列索引:对应像素的列号(从0开始)
③ 该函数返回对应像素的值(灰度图为int,彩色图为元素为int的tuple)

# 获取灰度图像的像素
p = img.item(78,125)
print(p)

# 获取彩色图像的像素
blue = img.item(78,125,0)
green = img.item(78,125,1)
red = img.item(78,125,2)

2.2.2 itemset():修改像素

使用 函数,用于修改像素值
调用格式:
图像名.itemset((行索引,列索引),新值)
函数参数说明:
① 行索引:对应像素的行号(从0开始)
② 列索引:对应像素的列号(从0开始)
注意:行、列索引构成一个元组,使用该元组作为实参传入函数
③ 新增:对应传入需要变成的新像素值
④ 该函数没有返回值

# 灰度图像设置像素值
img.itemset((88,99),0)

# 彩色BGR图像设置像素值
img.itemset((88,99,0),255) # 设置蓝色通道的值
img.itemset((88,99,1),255) # 设置绿色通道的值
img.itemset((88,99,2),255) # 设置红色通道的值

2.3 对比 opencv访问像素 与 numpy访问像素

  • opencv的单个像素访问方式的速度是很慢的,该方法主要用于 访问区域内的像素组(类似于序列中的切片操作),比如前5行和后3列等。
  • 为了访问单个像素,numpy有特别的方法,array.item()和array.itemset()。但是,他们无法返回向量,numpy方式适用于对单个像素进行操作

三、获取图像属性

3.1 形状:行、列、通道数

shape:可获取图像的形状

使用 shape 属性,用于获取图像的形状,返回包含 行数,列数,通道数的元组
注意:
①灰度:返回 行数 与 列数的 tuple
②彩色:返回 行数 与 列数,通道数的 tuple

调用格式:
图像名.shape

# eg
import cv2
# 读入灰度图像
img1 = cv2.imread('灰度图像')
print(img1.shape) # 输出(512,512)

# 滴入彩色图像
img2 = cv2.imread('彩色图像')
print(img2.shape) # 输出 (512,512,3)


3.2 像素数目

3.2.1 size:可以获取图像的像素数目

使用 size 属性,用于 获取图像的像素数目
注意:
①灰度:返回 行数*列数的int型数据
②彩色:返回 行数*列数*通道数的int型数据

调用格式:
图像名.size

# eg
import cv2
img = cv2.imread('图像名')
print(img.size) # 返回一个整数型的值

3.3 图像的数据类型

3.3.1 dtype:可以获取图像的数据类型

使用 dtype 属性,用于 获取图像的数据类型

调用格式:
图像名.dtype

# eg
import cv2
img = cv2.imread('图像名称')
print(img.dtype) # 对应的类型(uint8,uint16等)

四、图像的基础操作

4.1 图像ROI

4.1.1 图像ROI理论介绍

  • ROI(region of interest),感兴趣区域
  • 从被处理的图像以方框、圆、椭圆、不规则多边形等方式勾勒出需要处理的区域
  • 可以通过使用各种算子(Operator) 和 函数来求得感兴趣区域 ROI,并进行图像的下一步处理

4.1.2 图像ROI的具体实现

import cv2
img = cv2.imread('图像名称')
# 获取图像中感兴趣区域
face = img[200:400,200:400]
# 将感兴趣的图像赋值到另一个区域
img[400:600,400:600] = face

在这里插入图片描述

import cv2
dir = 'E:\\python_opencv\\images\\test\\2020.9.2\\'
img = cv2.imread(dir + 'Fig0638(a)(lenna_RGB).tif', cv2.IMREAD_UNCHANGED)
# b = np.ones((101,101,3))
b = img[220:400, 250:350]
img[0:180, 0:100] = b
cv2.imshow('roi', img)
print(b.shape)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述


4.2 通道拆分与合并

4.2.1 split():拆分通道

  • 使用opencv的常规方式实现拆分
import cv2
img = cv2.imread('图像名')
b = img[:,:,0] #获取蓝色通道
g = img[:
  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ModelBulider

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值