需要安装的包
pip install numpy
pip install opencv-python
图像的存在形式
图像实际上一个三维矩阵(行高,列宽,通道数)。一张图像的总像素点的计算公式为:行*列*通道数。通道数为1的图像是灰度图像,通道数为3的图像是rgb三色图像。
图像的读取与保存
读图片
#导入模块
import cv2 as cv
#读图片 path为图片地址
src = cv.imread(path)
图片的一些属性
print(type(image)) #输出图片数据结构的类型
print(image.shape) #输出图片的形状
print(image.size) #输出图片的总像素值
print(image.dtype) #输出图片的数据元素类型
#输出结果
<class 'numpy.ndarray'> #图片的数据类型为numpy包的ndarry类型(多维数组)
(527, 797, 3) #图片的高为527,宽为797,通道数为3
1260057 #总像素点的个数:527*797*3=1260057
uint8 #每个像素点的类型为无符号8位的int型
其实直接print(image)可以看到输出的为一个数组。
显示图片
src = cv.imread('imags\image.png') #读到一张图片
cv.imshow('input image',src) #显示图片
cv.waitKey(0) #无限等待
cv.destroyAllWindows() #销毁所有窗口
关于cv.waitkey(x)
在显示图片语句后如果不加cv.waitkey(x)语句图片将会一闪而过,这个语句的意思就是图片显示后等待x毫秒,x=0表示无限等待,在图片显示过程中没有按键被按下则返回-1,有按键被按下则返回该键的ASCII值,借此可以控制视频的播放
图像的保存
#第一个参数位地址+图像名,第二个为要保存的图像
cv.imwrite("C:/studyFiles/result.png",src)
读取视频
def getVideo():
# VideoCapture里的参数为数字表示打开电脑的第几个摄像头,如果只有一个摄像头可以不写括号
#capture = cv.VideoCapture(0)
#读取视频流
capture = cv.VideoCapture('C:video.mp4')
while (True):
# 读取每一帧 ret表示是否得到,值为True或Fasle,frame为图像
ret, frame = capture.read(1)
if ret==False:
break
# 将每一帧镜像翻转
#frame = cv.flip(frame, 1)
# 显示每一帧,连续显示成为视频
cv.namedWindow('video',cv.WINDOW_NORMAL)
cv.imshow("video", frame)
#cv.waitKey(x),x表示等待的毫秒数,0表示一直等待,若无键按下返回-1,若有按键按下返回相应键的ASCII码
c = cv.waitKey(10)
#ESC的ASCII码是27
if c == 27:
break
图像的创建与修改
图像的创建
import numpy as np
import cv2 as cv
#创建图片
img = np.zeros((400,400,3),np.uint8)
zeros(shape, dtype=None, order='C')
该方法创建一个全0矩阵,shape为矩阵的维度大小,dtype为元素类型,order:可选参数,C代表行优先,F代表列优先(内存中的存储顺序)
还有一个ones方法,跟该方法参数一样,创建一个全1矩阵
图像修改,其实就是对矩阵的修改
img = np.zeros((400,400,3),np.uint8)
#将通道1的数值修改成255
img[:,:,0] = np.ones((400,400))*255
#将通道2的数值修改成255
img[:,:,1] = np.ones([400,400])*255
#对单个值修改
img[200,200,1] = 255