导入模块
import cv2 #opencv读取的格式是BGR
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
数据读取-图像
- cv2.IMREAD_COLOR:彩色图像 –
- cv2.IMREAD_GRAYSCALE:灰度图像
- 需注意:opencv默认读取的图像是BGR格式,matplot读取的图像是RGB格式
img=cv2.imread('cat.jpg',cv2.IMREAD_COLOR) #cv2.IMREAD_COLOR可省略
img=cv2.imread('cat.jpg',cv2.IMREAD_GRAYSCALE) #读取灰度图像
#定义图像显示函数
def cv_show(name,img):
cv2.imshow(name,img)
cv2.waitKey(0) #cv2.waitKey(k),表示等待k 毫秒后窗口消失,k=0时表示按任意键终止
cv2.destroyAllWindows()
img.shape
cv2.imwrite('picname',img)
img.size
img.dtype
数据读取-视频
vc=cv2.videoCapture('test.mp4') #cv2.VideoCapture可以捕获摄像头,用数字来控制不同的设备,例如0,1。如果是视频文件,直接指定好路径即可。
if vc.isOpened():
open,frame=vc.read() #每执行一次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) # #cvtColor(1,2),其中1是要转换的图片,2是要转换成的格式
cv2.imshow('result',gray)
if cv2.waitKey(100)&0xFF==27:
break
vc.release()
cv2.destroyAllWindows()
截取部分图像数据
img=imread('cat.jpg')
cat=img[0:50,0:200]
cv_show('cat',cat)
颜色通道提取
b,g,r=cv2.split(img)
边界填充
- BORDER_REPLICATE:复制法,也就是复制最边缘像素。
- BORDER_REFLECT:反射法,对感兴趣的图像中的像素在两边进行复制例如:fedcba|abcdefgh|hgfedcb
- BORDER_REFLECT_101:反射法,也就是以最边缘像素为轴,对称,gfedcb|abcdefgh|gfedcba
- BORDER_WRAP:外包装法cdefgh|abcdefgh|abcdefg
- BORDER_CONSTANT:常量法,常数值填充。
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)
图像融合
#把图像大小改成一样
img_dog=cv2.revise(img,(412,412))
res = cv2.addWeighted(img_cat,0.4,img_dog,0.4,0) #res=αX+βY+b
res = cv2.resize(img, (0, 0), fx=4, fy=4)
图像阈值
- ret, dst = cv2.threshold(src, thresh, maxval, type)
- src:输入图,只能输入单通道图像,通常来说为灰度图
- dst: 输出图
- thresh:阈值
- maxval:当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值
- type:二值化操作的类型,包含以下5种类型:
cv2.THRESH_BINARY:超过阈值部分取maxval(最大值),否则取0 cv2.THRESH_BINARY_INV THRESH_BINARY的反转
cv2.THRESH_TRUNC 大于阈值部分设为阈值,否则不变
cv2.THRESH_TOZERO 大于阈值部分不改变,否则设为0
cv2.THRESH_TOZERO_INV THRESH_TOZERO的反转