数据读取
引入OpenCV库
import cv2
图片的读取
img=cv2.imread('cat.jpg')
#参数为图片的路径
注意:这里以及之后的路径都是相对路径
其中,读取的图片格式为ndarray数组格式:
print(type(img))
print(img.shape)
输出:<class ‘numpy.ndarray’>
(414, 500, 3)
注:
①数组的数为0-255之间,0代表黑色,255代表白色
②数值越大,颜色越深;数值越小,颜色越浅
③414和500分别表示图像的高和宽(像素点个数),3表示每个像素点具有三个颜色通道,即B(蓝色)G(绿色)R(红色)三个通道,将三个通道合到一块就是一个彩色图像(后面会讲到通道合并)
图像的显示:
cv2.imshow('image',img)
#第一个参数为图片展示时的名字,第二个参数为图片变量
cv2.waitKey(1000)
#这里的1000表示展示1000ms,如果参数为0,就表示按下随意键就终止图片展示
cv2.destroyAllWindows()
#这里表示删除图片窗口
图片的保存:
cv2.imwrite('mycat.png',img)
#第一个参数为保存图片的路径,第二个参数表示所保存的图片变量
视频的读取
cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
如果想要读取视频文件,只需要指定好视频路径即可。
注意:OpenCV读取的“视频”实质都是一帧一帧的图片,后期我们进行对视频流的处理时也是对图片处理
vc = cv2.VideoCapture('test.mp4')
#这里表示读取相关路径为test.mp4的视频
while open:
ret, frame = vc.read()
#如果能读取,则将第一个参数赋予True,否则赋予False
#第二个参数赋予所读取的图片
if frame is None:
break
#这里表示如果视频流读完了,即读取的图片是空值,就退出循环
if ret == True:
cv2.imshow('result', frame)#显示
if cv2.waitKey(100) & 0xFF == 27:
#处理一帧等100ms(处理间隔是100ms)
#27代表Esc退出键,表示按Esc就退出视频
break
vc.release()
#释放掉vc
cv2.destroyAllWindows()
#关闭视频窗口
图像处理基本操作
图像灰度处理
利用OpenCV中的cvtColor函数
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#注意:OpenCV直接读取的图片格式是BGR格式
#第二个参数表示将BGR变成GRAY
cv2.imshow('gray',gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
灰度图只有一个颜色通道,所以是个二维数组
print(gray.shape)
print(gray)
(414, 500)
截取部分图像数据
这里类似numpy数组里的截取部分数组
cat=img[0:300,0:150]
#这里表示取出高是300,宽是150的左上角矩形区域
cv2.imshow('cat',cat)
cv2.waitKey(0)
cv2.destroyAllWindows()
颜色通道提取与合并
通道提取
利用OpenCV中的split函数
b,g,r=cv2.split(img)
#参数为所要分割的图片变量
把三个通道切分称三个数组
print(r)
这里的二维数组只留下原图像的红色信息,绿色和蓝色被分割出去了
print(r.shape)
(414, 500)
此时,数组变成二维的了
只保留红色信息
# 只保留R
cur_img = img.copy()
#如果不加copy,则cur_img只是img的一个视图,这里类似numpy数组
cur_img[:,:,0] = 0
cur_img[:,:,1] = 0
#将B和G全部设成零
cv2.imshow('R',cur_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
处理后:
通道的合并
img=cv2.merge((b,g,r))
#将三个通道合并
print(img.shape)
cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
(414, 500, 3)
此时,数组又变回三维,图像变回彩色
文:齐鲁工业大学 云灵未来人工智能协会 AIDC017