opencv 学习笔记

处理图像

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"""
作者:Mibbp
日期: 2022年01月04日
"""
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

def cv_show (name,img):
cv.imshow(name,img) #显示图像
cv.waitKey(0) # 等待时间,毫秒级,0表示任意键终止
cv.destroyAllWindows()

img = cv.imread('01.jpg') #读取照片
# cv_show('01',img)
# print(img.shape) #图像三个参数,前两个参数是宽度和高度,第三个是颜色通道数量
#
# img1=img[0:50,0:200] #截取照片
# cv_show('02',img1)
#
# b,g,r=cv.split(img) #颜色通道提取,opencv是B-G-R
# print(b.shape)
#
# img=cv.merge((b,g,r)) #合并通道
#
# # 提取R通道 [:,:]长宽不设参数的话表示整张图片
# img2 = img.copy()
# img2[:,:,0]=0
# img2[:,:,1]=0
# cv_show('R',img2)

# 边界填充
top_size,bottom_size,left_size,right_size=(50,50,50,50) #上下左右边界的值

# 复制法 复制最边缘元素
replicate =cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv.BORDER_REPLICATE)
cv_show('rep',replicate)

# 反射法 中间为原图像,左右为填充 fedcba|abcdefgh|hgfedcb
reflect =cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv.BORDER_REFLECT)
cv_show('ref',reflect)

# 反射法 以最边缘为轴,中间为原图像,左右为填充 fedcb|abcdefgh|gfedcb
reflect101 =cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv.BORDER_REFLECT_101)
cv_show('ref101',reflect101)

# 外包装法 gfedcb|abcdefgh|gfedcb
wrap =cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv.BORDER_WRAP)
cv_show('wrap',wrap)

# 常数法 直接填充指定的
con =cv.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv.BORDER_CONSTANT,10)
cv_show('con',con)

处理视频

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
"""
作者:Mibbp
日期: 2022年01月04日
"""
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

vc =cv.VideoCapture('02.mp4') #读取视频
# 判断是否读取视频
if vc.isOpened():
open,frame = vc.read() #读取一帧画面
else :
open=False

# 把视频每一帧读取出来
while open:
ret, frame =vc.read()
gray = cv.cvtColor(frame, cv.COLOR_BGR2GRAY) #将这一帧转换为灰色
cv.imshow('result',gray) #显示这一帧

if cv.waitKey(33) & 0xFF ==27: #等待时间,如果按倒关闭键则退出
open=False
break


# 释放并且销毁所有窗口
vc.release()
cv.destroyAllWindows()

图像融合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
"""
作者:Mibbp
日期: 2022年01月04日
"""
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt

def cv_show(name,img):
cv.imshow(name,img)
cv.waitKey(0)
cv.destroyAllWindows()
# 图像融合 shape值必须一样
img1 = cv.imread('03.jpg')
img2 = cv.imread('01.jpg')

img2 = cv.resize(img2,(942,785)) #转换shape值
res = cv.addWeighted(img1, 0.4, img2, 0.6, 0)

cv_show('4',res)