1、安装cv2(OpenCV)
1)安装numpy
pip install numpy
2)安装opencv-python
pip install opencv-python
3)安装opencv-contrib-python
pip install opencv-contrib-python
注意:opencv-python
和opencv-contrib-python
的版本需要使用相同的版本。
2、使用cv2(OpenCV)读取图像数据
cv2.IMREAD_COLOR
:彩色图像
cv2.IMREAD_GRAYSCALE
:灰度图像
使用OpenCV读取图像数据,代码如下,
import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')print(img)#图像的显示,也可以创建多个窗口cv2.imshow('image',img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()print(img.shape)img=cv2.imread('wonhero.jpg',cv2.IMREAD_GRAYSCALE)print(img)print(img.shape)#图像的显示,也可以创建多个窗口cv2.imshow('image',img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(10000) cv2.destroyAllWindows()#保存cv2.imwrite('mypic.png',img)print(type(img)))print(img.size)print(img.dtype)
3、使用cv2(OpenCV)读取视频数据
使用cv2.VideoCapture()
可以捕获摄像头,用数字来控制不同的设备,例如,0
,1
。视频文件只需指定好路径即可。
import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np vc = cv2.VideoCapture('video.mp4')# 检查是否打开正确if vc.isOpened(): oepn, frame = vc.read()else: open = Falsewhile open: ret, frame = vc.read() if frame is None: break if ret == True: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) cv2.imshow('result', gray) if cv2.waitKey(100) & 0xFF == 27: breakvc.release()cv2.destroyAllWindows()
4、使用cv2(OpenCV)截取部分图像数据
可以方便的对图片进行载取需要的数据,代码如下,
import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')print(img)#图像的显示,也可以创建多个窗口cv2.imshow('image',img) part=img[0:50,0:200]cv2.imshow("part",part) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()
5、使用cv2(OpenCV)提取颜色通道
可以使用cv2.split()
对颜色通道进行提取,代码如下,
import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')b,g,r=cv2.split(img)print(r)print(r.shape)img=cv2.merge((b,g,r))print(img.shape)# 只保留Rcur_img = img.copy()cur_img[:,:,0] = 0cur_img[:,:,1] = 0cv2.imshow("R",cur_img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()# 只保留Gcur_img = img.copy()cur_img[:,:,0] = 0cur_img[:,:,2] = 0cv2.imshow("G",cur_img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()# 只保留Bcur_img = img.copy()cur_img[:,:,1] = 0cur_img[:,:,2] = 0cv2.imshow("B",cur_img) # 等待时间,毫秒级,0表示任意键终止cv2.waitKey(0) cv2.destroyAllWindows()
6、使用cv2(OpenCV)进行边界填充
BORDER_REPLICATE
:复制法,也就是复制最边缘像素。
BORDER_REFLECT
:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
BORDER_REFLECT_101
:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
BORDER_WRAP
:外包装法cdefgh|abcdefgh|abcdefg
BORDER_CONSTANT
:常量法,常数值填充。
import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img=cv2.imread('wonhero.jpg')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_REPLICATE)reflect = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size,cv2.BORDER_REFLECT)reflect101 = cv2.copyMakeBorder(img, top_size, bottom_size, left_size, right_size, cv2.BORDER_REFLECT_101)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=0)import matplotlib.pyplot as pltplt.subplot(231), plt.imshow(img, 'gray'), plt.title('ORIGINAL')plt.subplot(232), plt.imshow(replicate, 'gray'), plt.title('REPLICATE')plt.subplot(233), plt.imshow(reflect, 'gray'), plt.title('REFLECT')plt.subplot(234), plt.imshow(reflect101, 'gray'), plt.title('REFLECT_101')plt.subplot(235), plt.imshow(wrap, 'gray'), plt.title('WRAP')plt.subplot(236), plt.imshow(constant, 'gray'), plt.title('CONSTANT')plt.show()
7、图像数值计算
两个图像可以进行数值计算,代码如下,
import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img_1=cv2.imread('img1.jpg')img=img_1 + 10print(img_1[:5,:,0])print(img[:5,:,0])#相当于% 256print((img + img_1)[:5,:,0])#取最大值print(cv2.add(img,img_1)[:5,:,0])
8、图像融合
使用cv2.addWeighted()
可以进行两个图像进行融合,代码如下,
import cv2 #opencv读取的格式是BGRimport matplotlib.pyplot as pltimport numpy as np img_1=cv2.imread('img1.jpg')img_2=cv2.imread('img2.jpg')print(img_1.shape) #img_1尺寸:(400, 500, 3)#查看img_1的尺寸,并设置成相同尺寸才能融合img_2 = cv2.resize(img_2, (500, 400))res = cv2.addWeighted(img_1, 0.4, img_2, 0.6, 0)plt.imshow(res)