python-opencv 培训课程笔记(1)
python-opencv 培训课程笔记(1)
博主参加了一次opencv库的培训课程,把课程所学整理成笔记,供大家学习,第一次课程包括如下内容:
1.读取图像
2.保存图像
3.使用opencv库显示图像
4.读取图像为灰度图像
5.读取视频或者摄像头
6.颜色通道的拆分和合并
7.边界填充
8.图像大小修改操作(resize)
9.数值计算
下面我们就开始内容介绍:
首先需要先导入相关库:
import os
import cv2
import matplotlib.pyplot as plt
import numpy as np
第二步设置我们的文件读取路径,和文件保存路径:
path=r'D:\learn\photo\cv\cat.jpg'
path_dog=r'D:\learn\photo\cv\dog.jpg'
path2=r'D:\learn\photo\cv\cat_save.jpg'
1.读取图像
# imread(path,way)
#way=0 灰度图。way=1 彩图
img=cv2.imread(path)
img_dog=cv2.imread(path_dog)
imread默认读取彩图,如果后面加一个参数0,那么读取的就是灰度图。
2.保存图像
cv2.imwrite(path2,img_gray)
3.使用opencv库显示图像
def cv_show(name,img):
cv2.imshow(name,img)
#cv2.waitKey(0),接收0,表示窗口暂停
cv2.waitKey(0)
#销毁所有窗口
cv2.destroyAllWindows()
cv_show('cat',img)
显示如下:
4.读取图像为灰度图像
img_gray=cv2.imread(path,0)
cv_show('gray_cat',img_gray)
5.读取视频或者摄像头
path_video=r'D:\learn\photo\cv\test.mp4'
vc=cv2.VideoCapture(0)#启用摄像头
vc=cv2.VideoCapture(path_video)#读取视频
if vc.isOpened():
ret,frame=vc.read()
else :
ret=False
while ret:
if ret :
img_c=cv2.cvtColor(frame,1)#进行通道转换
cv2.imshow('video',img_c)
# cv_show('video',frame)
if cv2.waitKey(100) & 0xFF==27:
break
ret,frame=vc.read()
6.颜色通道的拆分和合并
def img_rgb_split(img):
r,g,b=cv2.split(img)
print(r.shape)
return r,g,b
#颜色通道的合并
def img_rgb_merge(r,g,b):
img=cv2.merge(r,g,b)
return img
r,g,b=img_rgb_split(img)
cv_show('r_cat',r)
cv_show('g_cat',g)
cv_show('b_cat',b)
7.边界填充
top_size,bottom_size,left_size,right_size=(50,50,50,50)
#复制法,复制最边缘像素
replicate=cv2.copyMakeBorder(
img,
top_size,bottom_size,left_size,right_size,
borderType=cv2.BORDER_REFLECT
)
#反射法,在图像中指定像素的两边进行反射复制,
replicate101=cv2.copyMakeBorder(
img,
top_size,bottom_size,left_size,right_size,
borderType=cv2.BORDER_REFLECT101
)
#反射法,#以最边缘像素为轴
replicate_101=cv2.copyMakeBorder(
img,
top_size,bottom_size,left_size,right_size,
borderType=cv2.BORDER_REFLECT_101
)
#包装法
wrap=cv2.copyMakeBorder(
img,
top_size,bottom_size,left_size,right_size,
borderType=cv2.BORDER_WRAP
)
#常量法
constrant=cv2.copyMakeBorder(
img,
top_size,bottom_size,left_size,right_size,
borderType=cv2.BORDER_CONSTANT,
value=0
)
plt.subplot(231)
plt.imshow(img)
plt.title('img')
plt.subplot(232)
plt.imshow(replicate)
plt.title('REFLECT')
plt.subplot(233)
plt.imshow(replicate101)
plt.title('REFLECT101')
plt.subplot(234)
plt.imshow(replicate_101)
plt.title('REFLECT_101')
plt.subplot(235)
plt.imshow(wrap)
plt.title('wrap')
plt.subplot(236)
plt.imshow(constrant)
plt.title('constrant')
plt.show()
8.图像大小修改操作(resize)
img_dog=cv2.resize(img_dog,(500, 414))
9.数值计算
img_cat=img+10
plt.subplot(231)
plt.imshow(img)
plt.title('cat')
plt.subplot(232)
plt.imshow(img_cat)
plt.title('cat+10')
img_cat_dog=img+img_dog
plt.subplot(233)
plt.imshow(img_cat_dog)
plt.title('cat+dog')
plt.subplot(234)
plt.imshow(img_dog)
plt.title('dog')
img_weight=cv2.addWeighted(img,0.4,img_dog,0.6,0)
plt.subplot(235)
plt.imshow(img_weight)
plt.title('cat+dog_wight')
plt.show()
结果如下: