图像处理基本操作
retval=cv2.imread(filename, [flags])
flags读取标记,控制读取文件的类型,
cv2.imread() 支持的格式,,长长见识
import cv2
lena=cv2.imread('123.jpg') # 读取一份图像
print(lena) # 打印读取的图像数据,输出图像的部分像素值
[[[255 255 255]
[255 255 255]
[255 255 255]
...
[255 255 255]
[255 255 255]
[255 255 255]]
...
cv2.namedWindow('lesson') # 创建指定名称的窗口
cv2.imshow('lesson',lena) # imshow(窗口名称, 图像) 显示图像
cv2.waitKey(0)
cv2.imshow('1',lena) # 不使用namewidow 也一样的。。。就是自动建立窗口
cv2.waitKey(0) # 让程序等待,毫秒,0是一直等
cv2.imwrite('lalal.jpg', lena) # 保持图片
cv2.waitKey([delay])
# 可以用来等待按键,当用户按下键盘,执行获取返回值,没有按下就是-1,否则返回按键的ASCII码
# delay为负数或0 就一直等待,默认0
img=cv2.imread('5.jpg')
cv2.imshow('1',img)
key=cv2.waitKey() # 判断按键,然后使用不同窗口显示图像
if key==ord('a'):
cv2.imshow('a',img) # 这里如果设置了delay ,就在这段时间等待按键,直到超时
cv2.waitKey()
elif key==ord('b'):
cv2.imshow('b',img)
cv2.waitKey()
key=cv2.waitKey() # 也可以这样
if key!= -1:
print('触发了按键')
cv2.destroyWindows('1') # 销毁指定窗口
cv2.destroyAllWindows() # 销毁所有窗口,一个状态改变就全销毁
img=cv2.imread('5.jpg')
cv2.imshow('1',img)
cv2.waitKey()
cv2.destroyWindow('1') # 在按下按键后变成新的状态,窗口就自动销毁
图像的基本表示方法
- 二值图像
就是只包含黑色和白色的图像,通过一个矩阵来表示和处理图像。计算机处理是,划分成像素点,白的就是1, 黑的就是0.。
2. 灰度图像
将灰度处理为256个灰度级,使用[0,255] 来表示,255表示纯白,0就是纯黑,其他就是不同灰度,256个灰度级正好是一个字节
使用上述方法就可以表示灰度图像
也可以使用8位二进制来表示二值图,255就是白色,0就是黑色,没有其他灰度级
- 彩色图像
色彩就是由红绿蓝三色构成。主波长,纯度,明度,色调,饱和度,亮度等使用不同方式表示颜色的模式称为色彩空间,颜色空间或颜色模式
虽然不同的色彩空间由不同的表示方式,但是各种色彩空间之间可以根据需要按公式进行转换。这里只是基础的RGB色彩空间
RGB色彩空间中,有三个通道,每个色彩通道的范围都是0-255, 使用这三个色彩通道的组合表示颜色。也就是混合数量不同来展示不同颜色,256×256×256=16 777 216 种。。。。
也就是说,一个彩色图像,可以看作三个灰度图像的形式,每一部分使用三个来表示
一般情况下,通道顺序是RGB ,在opencv种,是 BGR。 在图像处理过程种,可以转换图形的通道顺序,对不同色彩空间的图像进行类型转换,例如将灰度转换成二值图,彩图转换成灰度
像素处理
像素的图像构成的基本单位,像素处理时图像处理的基本操作,可以通过位置索引的形式对图像内的元素进行访问,处理
- 二值图及灰度图
opencv 中,最小的数据类型时无符号8位数,所以实际上没有二值图这种数据类型,二值图通常时通过处理得到的。可以将二值图理解为特殊的灰度图。
图像就是numpy的数组,一个灰度图就是一个二维数组,可以访问其中的像素值。
至于坐标嘛,,x轴向下,y 轴向右
- 彩色图像
RGB模式的彩色图子啊读入opencv 内进行处理,会按照行方向依次读取该RGB的B G R通道,并将像素点以行为单位保存在ndarray的列中,
例如:使用image[0,0,0] 访问图像B通道第零行,第0列 上的像素点。三个索引分别是 [行, 列, 通道] 。image[x,y]是获得三个通道的值。
使用numpy.array 访问像素
numpy.array 提供了item() and itemset() 来访问修改像素值,这两个函数的效率更高。
- 二值图和灰度图
随机生成个图像,item(x,y) 获取数值,itemset((x,y),value) 设置值
2. 彩色图像
使用item itemset 就要加上通道信息了。item(行,列,通道) itemset(三元组索引值,新值)
感兴趣区域 ROI
在图像处理的过程中,我们会对某一部分感兴趣,这就是感兴趣区域,设定感兴趣区域后,可以对该区域进行整体操作。比如把这块区域复制到另一个图像中。