一、环境配置
1、在虚拟环境中安装以下库:
opencv-python==3.4.1.15
opencv-contrib-python==3.4.1.15
建议安装3.4.1的版本,3.4.2之后的版本做了专利保护,有的功能不能实现。
虚拟环境的安装以及安装库的问题见PyQt5专栏中的第一节。
2、安装jupyter notebook
pip install jupyter——安装
jupyter notebook——启动
二、图像的基本操作
1、图像的操作
cv2.IMREAD_COLOR:彩色图像
cv2.IMREAD_GRAYSCALE:灰度图像
1 # *******************读取图片**********************开始2 # 导入库3 import cv24 import numpy asnp5 # import matplotlib.pyplot asplt6
7 # 读入图片8 # img = cv2.imread('cat.jpg')9 img = cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE) # 读入灰度图像10
11 # 显示图片12 # cv2.imshow('image',img)13 # cv2.waitKey(10000) # 显示10秒14 # cv2.destroyAllWindows()15
16 # 定义展示图片函数17 def cv_show(name,img):18 cv2.imshow(name,img)19 cv2.waitKey(0)20 cv2.destroyAllWindows()21
22 cv_show('image',img) # 调用函数cv_show23
24 # 打印一些参数25 print(img) # 打印图片26 print(img.shape) # 打印图像的尺寸27 print(type(img)) # 打印的图像的格式28 print(np.size(img)) # 打印图片的大小29 # *******************读取图片**********************结束
2、视频的操作
cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
如果是视频文件,直接指定好路径即可
1 # *******************读取视频**********************开始2 # 导入库3 import cv24 import numpy asnp5 # import matplotlib.pyplot asplt6
7 vc = cv2.VideoCapture('test.mp4') # 读取视频8
9 # 检查是否打开正确10 ifvc.isOpened():11 open, frame =vc.read()12 else:13 open =False14
15 whileopen:16 ret, frame =vc.read()17 if frame isNone:18 break
19 if ret ==True:20 gray =cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)21 cv2.imshow('result', gray)22 if cv2.waitKey(10) & 0xFF == 27: # 每一帧的等待时间以及关闭23 break
24 vc.release()25 cv2.destroyAllWindows()26
27 # *******************读取视频**********************结束
3、截取部分图像+颜色通道获取
1 # *******************截取部分图像+颜色通道获取**********************开始2 # 导入库3 import cv24 # import numpy asnp5 # import matplotlib.pyplot asplt6
7 img=cv2.imread('cat.jpg')8 cat=img[0:200,0:200] # 截取部分图像数据9
10 # 定义展示图片函数11 def cv_show(name,img):12 cv2.imshow(name,img)13 cv2.waitKey(0)14 cv2.destroyAllWindows()15
16 # cv_show('cat',cat)17
18 b,g,r=cv2.split(img) # 获取图像的r,b,g通道数值19 print(b)20 print(b.shape)21
22 img=cv2.merge((b,g,r)) # r,g,b通道合成23 print(img.shape)24
25 # 只保留R26 cur_img =img.copy()27 cur_img[:,:,0] = 0# 除R通道其余都设置为028 cur_img[:,:,1] = 0
29 cv_show('R',cur_img) # 只保留R通道30
31 # 只保留G32 cur_img =img.copy()33 cur_img[:,:,0] = 0
34 cur_img[:,:,2] = 0
35 cv_show('G',cur_img) # 只保留G通道36
37 # 只保留B38 cur_img =img.copy()39 cur_img[:,:,1] = 0
40 cur_img[:,:,2] = 0
41 cv_show('B',cur_img) # 只保留B通道42 # *******************截取部分图像+颜色通道获取**********************结束
4、边界填充
BORDER_REPLICATE:复制法,也就是复制最边缘像素。
BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT:常量法,常数值填充。
1 #*******************边界填充**********************开始
2 importcv23 importmatplotlib.pyplot as plt4
5 img = cv2.imread('cat.jpg')6
7 #设置参数
8 top_size,bottom_size,left_size,right_size = (50,50,50,50)9
10
11 replicate = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, borderType=cv2.BORDER_REPLICATE)12 reflect =cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)13 reflect101 =cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)14 wrap =cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_WRAP)15 constant = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_CONSTANT, value=0)16
17 plt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')18 plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')19 plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')20 plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')21 plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')22 plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')23
24 plt.show()25 #*******************边界填充**********************结束
5、数值计算
1 #*******************数值计算**********************开始
2 importcv23
4 img_cat=cv2.imread('cat.jpg')5
6 print(img_cat[:5,:,0]) #原图 打印前五行
7
8 img_cat2 = img_cat+10
9 print(img_cat2[:5,:,0]) #处理后 打印前五行
10
11 #直接相加==%256 求余数
12 print((img_cat+img_cat2)[:5,:,0]) #相加后 打印前五行
13
14 #add函数
15 print(cv2.add(img_cat,img_cat2)[:5,:,0]) #add后 打印前五行
16 #*******************数值计算**********************结束
6、图像融合
R = aX1 + aX2 + b
1 #*******************图像融合**********************开始
2 importcv23
4 img_cat=cv2.imread('cat.jpg')5 img_dog=cv2.imread('dog.jpg')6
7 #查看当前图像的各自参数
8 print(img_cat.shape)9 print(img_dog.shape)10
11 #修改图像的大小 保持一致
12 img_dog = cv2.resize(img_dog,(500,414))13 print(img_dog.shape)14
15 #加权融合
16 res = cv2.addWeighted(img_cat, 0.4, img_dog, 0.6, 0)17 print(res.shape)18
19 #显示图像
20 #定义展示图片函数
21 defcv_show(name,img):22 cv2.imshow(name,img)23 cv2.waitKey(0)24 cv2.destroyAllWindows()25
26 cv_show('image',res)27
28 #比例修改图像大小
29 img_cat = cv2.resize(img_cat,(0,0),fx=3,fy=1)30 cv_show('cat_image',img_cat)31 #*******************图像融合**********************结束
7、图像灰度转换
cv2.COLOR_BGR2GRAY
1 #*******************图像的灰度转换**********************开始
2 import cv2 #opencv读取的格式是BGR
3 #import numpy as np
4 #import matplotlib.pyplot as plt # Matplotlib是RGB
5
6 img=cv2.imread('cat.jpg')7 img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #灰度转换
8 print(img_gray.shape)9 #*******************图像的灰度转换**********************结束