1.图像的边界填充
边界填充的方式:上、下、左、右
top_size,bottom_size,left_size,right_size = (70,70,70,70)
- 复制法,复制最边缘的像素
replicate = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,borderType=cv2.BORDER_REPLICATE)
- 反射法,例如:fedcba|abcdefg|gfedcb
reflect = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT)
- 反射法,例如:gfedcb|abcdefgh|gfedcba
reflect101 = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT_101)
- 外包装法,例如:cdefgh|abcdefgh|abcdefg
wrap = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_WRAP)
- 常量法,常数值填充
constant = cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_CONSTANT,value=220)
2.数值计算
2.1 + 法
img = cv2.imread(path)
img1 = img + 10 # 加10表示的是每一个像素点都加10,整体shape值不变
- 只有shape相同的两张图才可以进行相加操作
img2 = img + img
- 相加之后,例如第一个数 34,145 + 145 = 290 > 255,产生越界,由于 dtype 是 uint8,所以,表示为 290 % 256 = 34
2.2 add法
cv2.add(img,img)
- 没有越界的不变,越界的表示为255
3.图像融合
- shape不同的图像通过resize函数进行处理
img1 = cv2.resize(img1,(240,240))
res = cv2.addWeighted(img,0.4,img1,0.6,0) # 权重式加法
4.视频读取
import cv2
vc = cv2.VideoCapture('test.mp4')
# 检查是否打开正确
if vc.isOpened():
'''vc.read()是一帧一帧的读取,返回两个值
第一个值:bool类型,若这一帧读取成功,返回True
第二个值:当前这一帧图像的三维数组
'''
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)
# 彩色视频输出
# cv2.imshow('result',frame)
# 指定读取速度并且按退出键退出窗口
if cv2.waitKey(30) & 0xFF == 27:
break
# 释放视频
vc.release()
cv2.destroyAllWindows()