OpenCV学习笔记(一)——OpenCV入门及图像处理基础

一. OpenCV入门

1.1 读取图像

retval = cv2.imread( filename[, flags] )

  • retval 是返回值,其值是读取到的图像。如果未读取到图像,则返回“None”。
  • filename 表示要读取的图像的完整文件名。
  • flags 是读取标记。该标记用来控制读取文件的类型,具体如表1-1 所示。表1-1 中的第一列参数与第三列数值是等价的。例如cv2.IMREAD_UNCHANGED=−1,在设置参数时,既可以使用第一列的参数值,也可以采用第三列的数值。
    在这里插入图片描述
1.2 显示图像
1.2.1 cv2.imshow( winname, mat )
  • winname 是窗口名称。
  • mat 是要显示的图像。
1.2.2 retval = cv2.waitKey( [delay] )
  • retval 表示返回值。如果没有按键被按下,则返回−1;如果有按键被按下,则返回该按键的ASCII码。
  • delay 表示等待键盘触发的时间,单位是ms。当该值是负数或者零时,表示无限等待。该值默认为0。

在实际使用中,可以通过函数cv2.waitKey()获取按下的按键,并针对不同的键做出不同的反应,从而实现交互功能。例如,如果按下A 键,则关闭窗口;如果按下B 键,则生成一个窗口副本。

import cv2
lena=cv2.imread("lena.bmp")
cv2.imshow("demo", lena )
key=cv2.waitKey()
if key==ord('A'):
cv2.imshow("PressA",lena)
elif key==ord('B'):
cv2.imshow("PressB",lena)
1.2.3 cv2.destroyWindow( winname )
  • winname是窗口名称。

在实际使用中,该函数通常与函数cv2.waitKey()组合实现窗口的释放。

import cv2
lena=cv2.imread("lena.bmp")
cv2.imshow("demo", lena )
cv2.waitKey()
cv2.destroyWindow("demo")
1.2.4 cv2.destroyAllWindows( )
  • 用于释放(销毁)所有窗口。
import cv2
lena=cv2.imread("lena.bmp")
cv2.imshow("demo1", lena )
cv2.imshow("demo2", lena )
cv2.waitKey()
cv2.destroyAllWindows()
1.3 保存图像

retval = cv2.imwrite( filename, img[, params] )

  • retval 是返回值。如果保存成功,则返回逻辑值真(True);如果保存不成功,则返回逻辑值假(False)。
  • filename 是要保存的目标文件的完整路径名,包含文件扩展名。
  • img 是被保存图像的名称。
  • params 是保存类型参数,是可选的。

二. 图像处理基础

2.1 图像基本表示方法
2.1.1 二值图像

二值图像是指仅仅包含黑色(0)和白色(1)两种颜色的图像。

2.1.2 灰度图像

通常,计算机会将灰度处理为256 个灰度级,用数值区间[0, 255]来表示。其中,数值“255”表示纯白色,数值“0”表示纯黑色,其余的数值表示从纯白到纯黑之间不同级别的灰度。

2.1.3 RBG彩色图像

在 RGB色彩空间中,存在R(red,红色)通道、G(green,绿色)通道和B(blue,蓝色)通道,共三个通道。每个色彩通道值的范围都在[0, 255]之间,我们用这三个色彩通道的组合表示颜色。
一般情况下,在RGB色彩空间中,图像通道的顺序是R→G→B,即第1个通道是R 通道,第2个通道是G 通道,第3个通道是B 通道。需要特别注意的是,在OpenCV 中,通道的顺序是B→G→R。

2.2 像素处理
2.2.1 二值图像与灰度图像

在OpenCV 中,最小的数据类型是无符号的8位数。因此,在OpenCV 中实际上并没有二值图像这种数据类型,二值图像经常是通过处理得到的,然后使用0表示黑色,使用255表示白色。
在面向Python 的OpenCV中,图像就是Numpy库中的数组。一个OpenCV 灰度图像是一个二维数组,可以使用表达式访问其中的像素值。例如,可以使用image[0,0]访问图像image 第0行第0列位置上的像素点。第0行第0列位于图像的左上角,其中第1 个索引表示第0行,第2个索引表示第0列。

2.2.2 彩色图像

RGB 模式的彩色图像在读入OpenCV 内进行处理时,会按照行方向依次读取该RGB 图像的B通道、G通道、R通道的像素点,并将像素点以行为单位存储在ndarray 的列中。
可以使用表达式访问数组内的值。例如,可以使用image[0,0,0]访问图像image的B通道的第0行第0列上的像素点,式中:

  • 第 1 个索引表示第0 行。
  • 第 2 个索引表示第0 列。
  • 第 3 个索引表示第0 个颜色通道。
#例:使用Numpy 生成一个三维数组,用来观察三个通道值的变化情况
import numpy as np
import cv2
img=np.zeros((300,300,3),dtype=np.uint8)
img[:,0:100,0]=255
img[:,100:200,1]=255
img[:,200:300,2]=255
print("img=\n",img)
cv2.imshow("img",img)
cv2.waitKey()
cv2.destroyAllWindows()

在这里插入图片描述

2.3 使用numpy.array访问像素
2.3.1 img.item(行,列[,通道])
  • 访问图像img的像素值。
  • img为二值或灰度图时不需要通道参数,为彩色图的时候需要通道参数。
2.3.2 itemset((行,列[,通道]),新值)
  • 修改图像的像素值。
  • img为二值或灰度图时元组索引值内为行和列两个元素,为彩色图的时候为行、列和通道三个参数。
2.4 通道操作
2.4.1 b,g,r=cv2.split(img)
  • 拆分出图像的rgb值。
2.4.2 bgr=cv2.merge([b,g,r])
  • 将三个通道的灰度图像构成一幅彩色图像。
2.5 获取图像属性
2.5.1 img.shape

如果是彩色图像,则返回包含行数、列数、通道数的数组;如果是二值图像或者灰度图像,则仅返回行数和列数。通过该属性的返回值是否包含通道数,可以判断一幅图像是灰度图像(或二值图像)还是彩色图像。

2.5.2 img.size

返回图像的像素数目。其值为“行×列×通道数”,灰度图像或者二值图像的通道数为1。

2.5.3 img.dtype

返回图像的数据类型。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值