图像的获取
获取方式
- 网页上下载(拷贝)—— 自然图像
- Numpy 数组生成图片
图像的四个属性
img.shape : 返回元组,其值是图像的高度和宽度(即数组的行和列);彩色图像有第三个参数为 BGR 3通道
type(img) : numpy.ndarray ( numpy 数组)
img.dtype : np.uint8 ( 0-255 为 256 个灰度等级,彩色图像即每个通道范围在 0-255)
img.size : 高度*宽度(像素点);若为彩色图像即 高度*宽度*3
图像基础操作
Opencv图像存储方式为 Numpy 数组,其数据类型为 numpy.uint8 ( 8个字节 )
读,写,显示图像
读取图像
Opencv 中的 imread( ) 函数用于将文件中的图像读入内存,该函数支持各种静态图像文件格式(BMP , PNG , JPEG , JPG , TIFF——用于保存分辨率较大的图)
基本格式:
img = cv2.imread('filename',flags)
函数参数说明:
filename:读取图像的文件路径和文件名 ( 路径中使用双斜杠 )
flags:读取图片的方式,可选项如下:cv2.IMREAD_COLOR(1):始终将图像转换为 3 通道BGR彩色图像,默认方式(Opencv 默认的图像格式为BGR,即 3 通道图像数组的 3 个维度,依次为 B ( 蓝色 ),G ( 绿色 ),R ( 红色 ) 通道的像素)
cv2.IMREAD_GRAYSCALE(0):始终将图像转换为单通道灰度图像
cv2.IMREAD_UNCHANGED(-1):按原样返回加载的图像(使用Alpha通道)
cv2.IMREAD_ANYDEPTH(2):在输入具有相应深度时返回16位/ 32位图像,否则将其转换为8位
cv2.IMREAD_ANYCOLOR(4):以任何可能的颜色格式读取图像
返回值 retval:读取的 OpenCV 图像,nparray 多维数组
写图像(保存图像)
Opencv 中的 imwrite ( ) 函数用于将 NumPy 数组中保存的图像写入文件
基本格式:
cv2.imwrite('filename',img)
函数参数说明:
filename:保存图像的路径,保存的图像名字及类型(后缀名可与读取的图像文件不一致——对NumPy 数组压缩的方式不同)
img:读取的图像文件,也可以是读取的视频中的一帧 frame(读取到的 NumPy 数组)
显示图像
Opencv 中的 imshow ( ) 函数用于在窗口显示图像
基本格式:
cv2.imwshow('filename',img)
函数参数说明:
filename:显示窗口名
img:读取的图像文件,也可以是读取的视频中的一帧 frame(读取到的 NumPy 数组)
代码展示:
import cv2
import numpy as np
img1 = cv2.imread('D:\\opencv\\image\\08_wlq.png',1) #以彩色形式读取
cv2.imshow('duck_color',img1) #显示图像
cv2.waitKey(0) #等待按键跳转到下一语句(该句是按任意按键继续)
cv2.imwrite('save_duck_1.png',img1) #默认保存工程文件夹路径
img2 = cv2.imread('D:\\opencv\\image\\08_wlq.png',0) #以灰度形式读取
cv2.imshow('duck_gray',img2)
cv2.waitKey(0)
cv2.imwrite('save_duck_2.png',img2)
读写显示视频(示例代码)
import cv2
vc = cv2.VideoCapture('C:\\Users\\Administrator\\Desktop\\Minions_banana.mp4') #创建vidoe对象
buer,frame = vc.read() #buer是一个布尔值,读取视频成功为 1,frame为读入的一帧
while buer:
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) #灰度读取
cv2.imshow('stn',gray)
buer,frame = vc.read()
key = cv2.waitKey(25) #延迟时间
if key == 27: #按esc键结束
break
vc.release() #关闭视频
cv2.destroyAllWindows()
色彩空间的改变
Opencv 中的 cv2.cvtColor ( ) 函数用于转换色彩空间类型 NumPy 数组中保存的图像写入文件
基本格式:
dst = cv2.cvtColor(src,code[,dstcn])
函数参数说明:
dst:表示转换后的图像
src:表示转换前的图像
code:表示色彩空间类型转换码
dstCn:表示目标图像的通道数常用的空间类型转换码:
cv2.COLOR_BGR2RGB:将BGR色彩空间转换为RGB色彩空间
cv2.COLOR_BGR2GRAY:将BGR色彩空间转换为GRAY色彩空间(灰度)
示例代码
img = cv2.imread('C:\\Users\\Administrator\\Desktop\\08_wlq.png',1)
cv2.imshow('img_BGR',img)
cv2.waitKey(0)
img2 = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
cv2.imshow('img_RGB',img2)
cv2.waitKey(0)
img3 = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imshow('img_GRAY',img3)
cv2.waitKey(0)
图像通道操作
图像通道的拆分
opencv函数拆分通道:split函数
b,g,r = cv2.split(img)
cv2.imshow('img_B',b)
cv2.imshow('img_G',g)
cv2.imshow('img_R',r)
cv2.waitKey(0)
numpy数组拆分通道
blue = img[:,:,0]
green = img[:,:,1]
red = img[:,:,2]
cv2.imshow('img_B',blue)
cv2.imshow('img_G',green)
cv2.imshow('img_R',red)
cv2.waitKey(0)
图像通道的合并
opencv函数合并通道:merge
img_2 = cv2.merge([b,g,r])
cv2.imshow('img_merge_2',img_2)
cv2.waitKey(0)
numpy数组合并通道
#先创建一个numpy数组,再对其赋值
img_1 = np.zeros((img.shape[0],img.shape[1],3),dtype = np.uint8)
img_1[:,:,0] = b
img_1[:,:,1] = g
img_1[:,:,2] = r
cv2.imshow('img_merge',img_1)
cv2.waitKey(0)