01基本操作(边界填充,图片融合)

1.图片读取

注意路径最好都是英文
cv.imread(‘path’, cv.IMREAD_GRAYSCALE / cv.IMREAD_COLOR)
cv.cvtColor(image, cv.COLOR_BGR2GRAY) 彩色空间转换,第二个参数选择很多
cv.waitKey()
cv.imshow(‘name’, image)
cv.destoryAllWindows()

2.视频读取

vc = cv.VideoCapture(‘path’)
ret, fame = vc.read() 返回两个值,第一个返回布尔值表示是否有图像,第二个返回图像

while True:
	ret, frame = vc.read()
	if frame == None:
		break
	if ret == True:
		cv.imshow('video', frame)
		if cv2.waitKey(1) & 0xFF == 27:  #代表按指定的按键才推出,waitkey中的数值可控制视屏播放的速度
			break                     #为1表示电脑性能有多快放多快
			
vc.release() #将变量释放,最好每次结束都释放一下
cv.destoryAllWindow()

3. 颜色通道提取

b,g,r = cv.split(image)  #切分
image = cv.merge((b,g,r)) #组合,注意参数是要元组形式

4.边界填充

比较常见的操作,在图像变换过程中需要进行填充操作

top_size,bottom_size,left_size,right_size = (80,80,80,80) #表示上下左右需要填充的长度 
'''下面是几种不同的填充方法'''
#复制法,直接复制最边缘像素
replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE) 
#反射法 如果对感兴趣的图像在两边进行复制  fedcba|abcdefgh|hgfedcb  
reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT) 
#反射法2 对称复制  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) 
#常数填充法 多了个value参数 指定value的值进行填充
constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)

结果如下,注意观察边界
01基本操作(边界填充,图片融合)_第1张图片

5.数值计算

(image1+image2) #前提是格式一致
#注意:如果像素值相加超过255,则会除255取余数 如: 135+200 = 335,则 335%255=80
cv.add(iamge1, image2) #同上,但超过255则的像素显示为255

6.图像融合

#改变图像高宽比例
cv.resize(image,(a,b)) #指定高宽
cv.resize(iamge, (0,0), fx=1, fx=3) #不指定高宽,指定高宽的比例,不要漏了(0,0)
image = cv.addWeighted(image, k1, image2, k2, b)
#函数公式: image = k1*image1 + k2*image2 + b

教程来自:https://www.bilibili.com/video/BV1oJ411D71z?p=2

你可能感兴趣的:(OpenCV学习笔记)