自学记录 不专业
001 基础-读取与保存
读取图像
显示图像
保存图像
读取视频文件
读取图像
#读入图像 cv2.imread(filepath,flags)
'''
flags参数的取值:
cv2.IMREAD_COLOR:默认,载入一个彩色图像,忽略透明度 可用1代替
cv2.IMREAD_GRAYSCALE:载入一个灰阶图像 可用0代替
cv2.IMREAD_UNCHANGED:载入一个包含 Alpha 通道(透明度)的图像 可用-1代替
'''
img1=cv2.imread('imgs/lx.jpg',0)
显示图像
#显示图像 cv2.imshow(wname,img)
'''
wname 窗口的名字 window name
img 要显示的图像 窗口他大小为自动调整图片大小
'''
cv2.imshow('lxSHOW',img1)
key=cv2.waitKey(0)
cv2.destroyWindow('lxSHOW')
#cv2.destroyAllWindows()
if key==27:
print('Key_ESC has been pressed')
保存图像
#保存图像 cv2.imwrite(file,img,num)
'''
file 文件名
img 要保存的图像
'''
#其中可选参数num
'''
它针对特定的格式:对于JPEG,其表示的是图像的质量,用0 - 100的整数表示,默认95;对于png ,第三个参数表示的是压缩级别。默认为3.
cv2.IMWRITE_JPEG_QUALITY类型为 long ,必须转换成 int
cv2.IMWRITE_PNG_COMPRESSION, 从0到9 压缩级别越高图像越小。
'''
cv2.imwrite('imgs_save/lxGrey1.jpg',img1,[int(cv2.IMWRITE_JPEG_QUALITY),95])
cv2.imwrite('imgs_save/lxGrey2.png',img1,[int(cv2.IMWRITE_PNG_COMPRESSION),3])
# jpg属于有损压缩,是以图片的清晰度为代价的,数字越小,压缩比越高,图片质量损失越严重
# png属于无损压缩,数字0-9,数字越低,压缩比越低
读取视频文件
#读取视频 cv2.VideoCapture()
'''
参数为0 : 调用笔记本内置摄像头
参数为其他数字 : 不是很清楚,尝试用OBS开了个虚拟摄像头参数调成1可以调用
参数为路径 : 打开视频
'''
#检查摄像头初始化是否成功 cv2.VideoCapture.isOpened()
'''
成功返回Ture
'''
#读取视频的一帧 cv2.VideoCapture.read()
'''
每次调用便读取一帧 返回值为 ret,frame
ret : 布尔类型,如果正确读取便返回Ture
frame : 每一帧的图像,三维矩阵
'''
#释放摄像头 cv2.VideoCapture.release()
#vd = cv2.VideoCapture('videos/mgm.mkv')
vd = cv2.VideoCapture(1)
if vd.isOpened():
ret, frame = vd.read()
#frame = cv2.resize(frame,(1080,720))
else:
ret = False
while ret:
cv2.imshow('TheVideo',frame)
#利用waitKey设置每一帧的停顿时间 如果你按了ESC(27)则直接退出
#显然当waitKey为0时只有按键才会换帧
if cv2.waitKey(1) & 0xFF == 27:
break
ret, frame = vd.read()
#frame = cv2.resize(frame,(1080,720))
vd.release()
cv2.destroyAllWindows()
002基础-简单变换
裁剪
改变图片大小
改变图片大小-自己实现
图片反转
颜色通道分离与合并
cv2.cvtColor 通道转换
简单数值计算
cv2.addWeighted
裁剪
#图片裁剪
img_cliped = img[100:600,50:1050]
cv2.imshow('Clip', img_cliped)
cv2.waitKey(0)
cv2.destroyWindow('Clip')
改变图片大小
#图片改变大小 cv2.resize(img,(整形宽,整形高),fx,fy)
'''
可以给出固定的宽高
也可以给(0,0)按倍数变化(fx,fy)
'''
img_resized = cv2.resize(img, (1200,500)) #(宽1200,高500)
img_resized2 = cv2.resize(img, (0,0), fx = 0.4, fy = 0.4)
cv2.imshow('Resize', img_resized)
cv2.imshow('Resize2', img_resized2)
cv2.waitKey(0)
cv2.destroyAllWindows()
改变图片大小-自己实现
#图片改变大小 自己实现
import numpy as np
import cv2
img=cv2.imread('imgs/lx.jpg',1)
rate=0.4
imgH,imgW,imgN=img.shape
newH,newW,newN=int(imgH*rate),int(imgW*rate),imgN
new=np.zeros((newH,newW,newN),np.uint8)
for i in range(newH):
for j in range(newW):
ii=int(i*(imgH*1.0/newH))
jj=int(j*(imgW*1.0/newW))
new[i,j]=img[ii,jj]
cv2.imshow('lxRESIZED',new)
#cv2.imshow('lxRESIZED',np.dstack((new[:,:,0],new[:,:,1],new[:,:,2])))
cv2.waitKey(0)
cv2.destroyAllWindows()
图片反转
#图片反转 cv2.flip(img,flipcode)
'''
#flipcode=0 沿x轴翻转
#flipcode>0 沿y轴翻转
#flipcode<0 x,y同时翻转
'''
flipX=cv2.flip(img,0)
flipY=cv2.flip(img,1)
flipXY=cv2.flip(img,-1