Opencv-Python笔记
注:Opencv读取图片的格式是BGR
- 数据读取——图像
① cv2.imread(‘参数1’,参数2) ——读取指定图像,参数1指图像名,参数2指图像格式,彩色or灰度注:cv2.IMREAD_COLOR ——彩色图像 cv2.IMREAD_GRAYSCALE ——灰度图像
② cv2.imshow(‘参数1’,参数2) ——显示图像 注:参数1指显示窗口名,可任意;参数2指需显示图像矩阵
③ cv2.waitKey(参数1);cv2.destroyAllWindows() ——等待时间,毫秒级,关闭显示窗口 注:参数1指毫秒数,若参数1等于0,则是按任意键关闭
④ cv2.imwrite(‘参数1’,参数2) ——保存 注:参数1指图像名或图像路径;参数2指图像矩阵数据
- 数据读取——视频
- cv=cv2.VideoCapture(‘’) ——读取指定路径下的视频流 注:cv2.VideoCapture()可捕获摄像头,0、1设定不同设备
- ##检查是否正确打开##
if vc.isOpened(): #视频流变量名.isOpened()
open, frame = vc.read() #open被赋予布尔值;frame被赋予某帧图像的矩阵值
else:
open = Flase
while open:
ret, frame = vc.read() #ret被赋予布尔值;
if frame is None: #若某帧图像是空白,则会退出完成
Break;
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # BGR2GRAY是指B、G、R三个通道顺序
cv2.imshow(‘result’,gray)
if cv2.waitKey(100) & 0xFF == 27: #0xFF是指Esc键
break
vc.release()
cv2.destroyAllWindows()
- 颜色通道提取
① b,g,r=cv2.split(图像矩阵变量名)
② cv2.merge((b, g, r)) ——图像通道重新组合
③ 若需只要一个通道的来显示图像,则可将其余两通道设为0
例如:###只保留R通道###
A_img = img.copy() #复制img图像数据矩阵赋予A_img
A_img[: , : , 0]=0 #通道0数据均赋予0
A_img[: , : , 1]=0 #通道1数据均赋予0
cv_show(‘R’, A_img)
- 边界填充
top_size,bottom_size,left_size,right_size = (a, b, c, d)
img_name = cv2.copyMakeBorder(参数1,top_size, bottom_size, left_size, right_size, borderType=参数2 ) 注:参数1是指需进行边界填充的图像数据矩阵;参数2是指填充的类型,如下是填充类型:
BORDER_REPLICATE :复制法,及复制图像最边缘像素
BORDER_REFLECT :反射法,及对感兴趣的图像中的像素在两边进行复制,eg: fedcba|abcdefgh|hgfedc
BORDER_REFLECT_101 :反射发,及以最边缘像素为轴,对称,eg:hgfedcb|abcdefgh|gfedcba
BORDER_WRAP :外包装法 eg: bcdefgh|abcdefgh|abcdefg
BORDER_CONSTANT :常量法,常数值填充 img_name = cv2.copyMakeBorder(参数1,top_size, bottom_size, left_size, right_size, borderType=参数2 ,value=number)
- 数值计算(像素值范围为0~255,共256个值)
① cv2.add(图像1矩阵,图像2矩阵) 注:若图像1与图像2对应元素相加大于255,,则定值为255
② 图像3矩阵 = 图像1矩阵 + 图像2矩阵 注:若图像1与图像2对应元素相加大于255,,则定值为与256的差值
- 图像融合(需确保图像大小一致)
- cv2.resize() ——重置图像的大小
用法1:cv2.resize(图像,(数值1,数值2)) ——将图像重置为数值1 × 数值2的图像
用法2:cv2.resize(图像,(0,0),fx=a,fy=b) ——将图像重置为x轴为a倍,y轴为b倍的图像
② cv2.addWeighted(图像1,a,