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读取的格式是BGR import matplotlib.pyplot as plt import numpy as np img=cv2.imread('cjavapy.jpg') print(img) #图像的显示,也可以创建多个窗口 cv2.imshow('image',img) # 等待时间,毫秒级,0表示任意键终止 cv2.waitKey(0) cv2.destroyAllWindows() print(img.shape) img=cv2.imread('cjavapy.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读取的格式是BGR import matplotlib.pyplot as plt import numpy as np vc = cv2.VideoCapture('video.mp4') # 检查是否打开正确 if vc.isOpened(): oepn, frame = vc.read() else: open = False while 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: break vc.release() cv2.destroyAllWindows()
4、使用cv2(OpenCV)截取部分图像数据
可以方便的对图片进行载取需要的数据,代码如下,
import cv2 #opencv读取的格式是BGR import matplotlib.pyplot as plt import numpy as np img=cv2.imread('cjavapy.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读取的格式是BGR import matplotlib.pyplot as plt import numpy as np img=cv2.imread('cjavapy.jpg') b,g,r=cv2.split(img) print(r) print(r.shape) img=cv2.merge((b,g,r)) print(img.shape) # 只保留R cur_img = img.copy() cur_img[:,:,0] = 0 cur_img[:,:,1] = 0 cv2.imshow("R",cur_img) # 等待时间,毫秒级,0表示任意键终止 cv2.waitKey(0) cv2.destroyAllWindows() # 只保留G cur_img = img.copy() cur_img[:,:,0] = 0 cur_img[:,:,2] = 0 cv2.imshow("G",cur_img) # 等待时间,毫秒级,0表示任意键终止 cv2.waitKey(0) cv2.destroyAllWindows() # 只保留B cur_img = img.copy() cur_img[:,:,1] = 0 cur_img[:,:,2] = 0 cv2.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读取的格式是BGR import matplotlib.pyplot as plt import numpy as np img=cv2.imread('cjavapy.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 plt plt.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读取的格式是BGR import matplotlib.pyplot as plt import numpy as np img_1=cv2.imread('img1.jpg') img=img_1 + 10 print(img_1[:5,:,0]) print(img[:5,:,0]) #相当于% 256 print((img + img_1)[:5,:,0]) #取最大值 print(cv2.add(img,img_1)[:5,:,0])
8、图像融合
使用cv2.addWeighted()
可以进行两个图像进行融合,代码如下,
import cv2 #opencv读取的格式是BGR import matplotlib.pyplot as plt import 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)