图像读取
- Img=cv2.imread():
a、图像读取img为矩阵,为numpy中ndarray的结构,如(500,500,3)(h,w,c)前两个数字是图像长宽的像素数,第三个显示为3元色,如读取灰度图,没有第3个数,矩阵中最小值为0,最大值为255,数据类型为unit8;
b、opencv默认读取形式为BGR 而plt读入的图为RGB读取灰度图,
c、添加第二参数cv.imread('图像位置',cv.IMREAD_GRAYSCALE),只有一个颜色通道读取彩色图,添加第二参数cv.imread('图像位置',cv.IMREAD_COLOR)
- cv2.imshow(‘name’,img) 图像显示,第一个为字符串的图像的名字,第二个为传入的图像;
- cv2.waitKey(0) 图像显示等待,括号内填等待时间,毫秒级,0表示任意键终止;
- cv2.destroyAllWindows() 摧毁图像;
- 上三(2/3/4)函数可结合成一个函数,直接调用
def cv_show(name,img,time):
cv2.imshow(name,img)
cv2.waitKey(time)
cv2.destroyAllWindows()
- 调出的img为numpy中的ndarray格式,可使用img.shape,查看img形状;
- 保存图像:cv2.imwrite('path(路径)',img)
视频的读取与灰度处理
- 打开视频文件:vc=cv2.VideoCapture('path(路径)')
- 检查视频是否打开:vc.isOpened()
- 读取图像 :open,frame=vc.read()
- 读取图像第一帧,再次read则读取第二帧,以此类推
- 返回值:open:布尔类型,可读取时为True;frame:当前帧的图像。
- 将彩色视频转换为灰度视频:
import cv2
vc=cv2.VideoCapture('car.mp4')
#确认视频是否成功打开
if vc.isOpened():
open,frame=vc.read()
else:
open=False
#将视频每帧转换为灰度图
while open: #若open为True,即图像正常打开,循环开始
ret,frame=vc.read() #从第一帧开始读取
if frame is None: #判断是否完成读取,如帧为空
break #帧为空则跳出循环
if ret==True:#如图片读取成功,且帧不空
gray=cv2.cvtColor(frame,cv2.COLOR_BGA2GRAY)#将图像转换为灰度图
cv2.imshow('result',gray)#显示图像
if cv2.waitKey(10) & oxFF==27: #图像关闭方式,1、等待10ms(可修改)后关闭; #2、按Esc键关闭 break
vc.release() #释放视频的内存空间
cv2.destroyAllWindows()#销毁视频,注意此方法中All后两个l为小写。
图像处理的部分简单操作
- 图像截图:img1=img[0:50,100:200]
- 将图像中三个颜色进行分割:b,g,r=cv2.split(img)
- img=cv2.merge(b,g,r) :将方法2中分开的颜色合并.
- b.shape,查看图像形状
- 只保留图像中的某颜色,并显示
cur_img=img.copy()#通过复制可以保留原图在此程序中的状态。
cur_img[:,:,0]=0 #三个颜色中索引为0的颜色设置为0,BGR中的B
cur_img[:,:,1]=0 #三个颜色中索引为1的颜色设置为0,BGR中的G
cv_show('red',cur_img)#仅显示图像的红色部分
学习文件参考:唐宇迪博士视频