0、导入模块
import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
1、数据读取-图像
读取彩色或者灰度图像
img=cv2.imread('name.jpg',cv2.IMREAD_COLOR)#彩色图像
img=cv2.imread('name.jpg',cv2.IMREAD_GRAYSCALE)#灰度图像
cv2.imshow('name',img)#显示照片
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imwrite('name',img)#保存图片
2、数据读取-视频
cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。
如果是视频文件,直接指定好路径即可。
vc=cv2.VideoCapture('name.mp4')#读取视频文件
if vc.isOpened():#检查是否打开视频文件
open,frame=vc.read()
else:
open=Flase
while open:#显示灰度视频
ret,frame=vc.read()
if ret==True:
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
cv2.imshow('name',gray)
if cv2.waitKey(100) & 0xFF==27:#按下'Esc'退出
break
vc.release()
cv2.destroyAllWindows()
3、截取部分图像数据
name=img[0:50,0:200]#截取X:0-50,Y:0-200像素的图片
4、颜色通道提取
b,g,r=cv2.split(img)
img=cv2.merge((b,g,r))
cur_img=img.copy#只保留R
cur_img[:,:,0]=0
cur_img[:,:,1]=0
cur_img=img.copy#只保留G
cur_img[:,:,0]=0
cur_img[:,:,2]=0
cur_img=img.copy#只保留B
cur_img[:,:,1]=0
cur_img[:,:,2]=0
5、边界填充
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)#反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
reflect_101=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_REFLECT_101)#反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
wrap=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_WRAP)#外包装法cdefgh|abcdefgh|abcdefg
constant=cv2.copyMakeBorder(img,top_size,bottom_size,left_size,right_size,cv2.BORDER_CONSTANT,value=0)#常量法,常数值填充。
6、数值计算
图像宽高像素一致可以相加减
直接相加,对应像素点数值大于255时,得到该点减去256后的数值
使用cv2.add(img_1,img_2)相加,对应像素点大于255时,一律置255
7、图像融合
图像进行融合前,需要保证图片的宽高像素一致,因此需要对图片进行重置
img_dog=cv2.resize(img_dog,(500,414))#把图片大小重置为宽500高414
res=cv2.addWeight(img_cat,0.4,img_dog,0.6,0)#按比例进行融合
res=cv2.resize(img,(0,0),fx=3,fy=2)#图片宽度放大3倍,高度放大2倍