赞
踩
目录
1.计算机认识的图像
2.计算机读取图像
(1)读取
(2)显示
(3)灰度转化
(4)图像保存
(5)尺寸修改
(6)截取部分图像数据
(7)颜色通道提取
(8)边界填充
3.计算机读取视频
1.RGB模型:包含个三通道,R红通道,G绿通道 ,B蓝通道
2.分辨率,即图像的解析度,单位英寸内的像素点数
3.灰度,表示图像像素的明暗程度的数值,即颜色深度。BGR格式图像的范围为0-255。白色为255,黑色为0。数据由矩阵构成
首先将图像转化为计算机认识的东西,将图像读取为像素矩阵
- import cv2 #导入cv2模块
- import matplotlib.pyplot as plt
- import numpy as np #导入numpy基本数值计算工具包
-
- img=cv2.imread('test2.jpg') #读取图片
cv2.imread读出的数据类型是uint8;value是numpy array;图像数据以BGR的格式进行存储,,通道值默认范围0-255。图片维度可以表示为(h,w,c)h,w,c分别表示长,宽,通道数。
将图片显示出来
- cv2.imshow('read1_img',img) #显示图像,给显示窗口命名
- cv2.waitKey(0) #使显示从窗口稍作等待
- cv2.destroyAllWindows()
waitKey()中的参数:若为0,表示按键盘任意键关闭窗口;
若非0,则表示以毫秒为单位的显示时间。
若有很多图像要显示,还可以将上述代码定义为一个函数
为什么要将图片灰度化呢? 图像灰度化的目的是为了简化矩阵,提高运算速度。
灰度图像是R=G=B的一种特殊彩色图像,对计算机来说n彩色图片的信息含量过大,而进行图片识别时,其实只需要使用灰度图像里的信息就足够了。
操作时,可利用CACOLOR_BGR2GRAY或者IMREAD_GRSAYSCALE将图片灰度化
用img.shape查看图像h w c,前者c为3,后者不显示c数值。
- gray_img=cv2.imread('test2.jpg',cv2.CACOLOR_BGR2GRAY)
- cv2.imshow('gray_img',gray_img)
因为imread读进来的是BGR数据,所以这里做BGR转GRAY
cv2.imwrite('gray_test.jpg',gray_img)
可以为保存的图像选择一个路径
- import cv2
- gray_img=cv2.imread('text3.jpg',cv2.IMREAD_GRAYSCALE)
- resize_img = cv2.resize(gray_img,dsize=(200,200))
- #显示原图
- cv2.imshow('gray_img',gray_img)
- #显示修改后的
- cv2.imshow('resize_img',resize_img)
- #打印原图大小
- print('未修改:',gray_img.shape)
- #打印从修改的大小
- print('修改后:',resize_img.shape)
- cv2.waitKey(0)
- cv2.destroyAllWindows()
运行结果
显示参数分别为(h,w,c)
补充:
img.shape 查看(h,w,c)
type(img) 查看图像格式
img.size 查看像素点数
img.dtype 查看数据类型
指定截取图像的长、宽范围
- img=cv2.imread('cat.jpg')
- cat=img[0:50,0:200]
- cv_show('cat',cat)
将三个颜色通道切分出来,用split() ,其中b,g,r顺序不能改变
- img=cv2.imread('cat.jpg')
- b,g,r=cv2.split(img)
切分之后,b,g,r的shape值是一样的
切分后想再组合回原样,可以用merge()函数
img=cv2.merge((b,g,r))
只保留R通道
按顺序,BGR分别为0,1,2。使BG都等于0以至于得到只保留R通道的图
[:,:,0],前面的::表示h w取所有
- cur_img = img.copy()
- cur_img[:,:,0] = 0
- cur_img[:,:,1] = 0
- cv.show('R',cur_img)
top_size,bottom_size,left_size,right_size = (n1,n2,n3,n4) 其中n为要填充的像素点数
以一个图像填充方法BORDER_REFLECT为例
- import cv2
- img=cv2.imread('text3.jpg')
-
- top_size,bottom_size,left_size,right_size = (50,50,50,50)
- reflect = cv2.copyMakeBorder(img,top_size,bottom_size,
- left_size,right_size,cv2.BORDER_REFLECT)
- cv2.imshow('reflect',reflect)
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
不同borderType的比较
BORDER_REPLICATE:复制法,复制最边缘像素。
BORDER_REFLECT:反射法,对图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法abcdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充,需要在设置一个value值,已显示填充的颜色
- import cv2
- img=cv2.imread('text4.jpg')
-
- top_size, bottom_size, left_size, right_size = (50, 50, 50, 50)
- #BORDER_REPLICATE
- replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REPLICATE)
- #BORDER_REFLECT
- reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT)
- #BORDER_REFLECT_101
- reflect_101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)
- #BORDER_WRAP
- wrap = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)
- #BORDER_CONSTANT
- constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_CONSTANT)
-
- #绘制子图,plt.subplot作用是指定子图的位置
- import matplotlib.pyplot as plt
- plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')
- plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title("REPLICATE")
- plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')
- plt.subplot(234), plt.imshow(reflect_101, 'gray'), plt.title("REFLECT_101")
- plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')
- plt.subplot(236), plt.imshow(constant, 'gray'), plt.title("CONSTANT")
-
- plt.show()
-
- cv2.waitKey(0)
- cv2.destroyAllWindows()
读取视频与读取图像很类似,因为视频相当于由一帧一帧图片组成
捕获视频——将其打开——读取每一帧——每一帧灰度化——显示处理后的视频
- import cv2
- #捕获视频
- vc = cv2.VideoCapture('text4.mp4')
- if vc.isOpened():
- open, frame = vc.read()
- else:
- open = False
- while open: #遍历视频每一帧
- ret, frame = vc.read() #读视频的每一帧
- if frame is None:
- break
- if ret == True:
- gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
- cv2.imshow('result',gray)
- #指定每一帧间隔时间,27为指定退出键来退出视频
- if cv2.waitKey(10) & 0xFF == 27:
- break
- vc.release()
- cv2.destroyAllWindows()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。