python环境:
版本:3.6.3
下载连接:https://www.python.org/ftp/python/3.6.3/python-3.6.3-amd64.exe
opencv环境:
版本:3.4.1.15
下载链接:https://pypi.tuna.tsinghua.edu.cn/simple/
opencv_python-3.4.1.15-cp36-cp36m-win_amd64.whl
opencv_contrib_python-3.4.1.15-cp36-cp36m-win_amd64.whl
1、图片基础操作
1 图片的读取、展示、保存
"""
读取图片
cv2.imread(filename, flags=None)
filename:图片名
flags:读取模式
cv2.IMREAD_COLOR 彩色图片
cv2.IMREAD_GRAYSCALE 灰色图片
"""
img = cv2.imread('cat.jpg') # 默认为彩色图片
"""
展示图片
cv2.imshow(winname, img)
winname:展示窗口名
img:图片
"""
cv2.imshow('cat', img)
cv2.waitKey(0) # 展示图片时间(毫秒),若为0,则无时间限制
cv2.destroyAllWindows()
"""
保存图片
cv2.imwrite(filename, img)
filename:保存文件名
"""
cv2.imwrite('newcat.jpg', img)
2 图片的截取、拉伸
# 图片截取
img[0:50, 0:200] # 截取左上角坐标为(0,0),竖直距离50,水平距离200
"""
图片拉伸
resize(src, dsize, dst=None, fx=None, fy=None)
src:图片
dsize:图片拉伸后的shape
fx,fy:若dsize为(0,0),则按照水平拉伸至fx倍,竖直拉伸至fy倍
"""
img = cv2.resize(img, (100, 500))
img = cv2.resize(img, (0, 0), fx= 0.6, fy=0.6)
3 图片的填充
"""
图片填充
copyMakeBorder(src, top, bottom, left, right, borderType, dst=None, value=None)
src:图片
top,bottom,left,right:四个方向延申的长度
borderType:延申模式
cv2.BORDER_REPLICATE:复制边缘像素
cv2.BORDER_REFLECT:反射法 gfedcba|abcdefg|gfedcba
cv2.BORDER_REFLECT_101:反射法 gfedcb|abcdefg|fedcba
cv2.BORDER_WRAP:外包装 abcdefg|abcdefg|abcdefg
cv2.BORDER_CONSTANT:常量法,常数填充 value=常数
"""
img = cv2.copyMakeBorder(img, 50, 50, 50, 50, cv2.BORDER_REFLECT_101)
4 图片三色的分离、合并
# 彩色图片GBR分离与合并
b, g, r = cv2.split(img) # opencv的三色是按照BGR来排列
img = cv2.merge((b,g,r))
5 图片权重合成
# 两张图片按照像素权重合并
img = cv2.addWeighted(img1, 0.4, img2, 0.6, 0) # img = img1*0.4 + img2*0.6 + 0
6 图片颜色空间转换
"""
图片颜色空间转换
cvtColor(src, code)
src:图片
code:转换成何种格式
cv2.COLOR_BGR2RGB:将BGR格式转换成RGB格式
cv2.COLOR_BGR2GRAY:将BGR格式转换成灰度图片
"""
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
7 图片阈值操作
"""
阈值操作
ret, thresh = cv2.threshold(src, thresh, maxval, type)
ret:阈值(float)
thresh:输出图片
src:输入图片
thresh:阈值
maxval:像素大于阈值(小于阈值)时重新赋予的新值
type:模式
cv2.THRESH_BINARY:超过阈值的数,重新赋值maxval,其他的赋值0
cv2.THRESH_BINARY_INV:cv2.THRESH_BINARY取反
cv2.THRESH_TOZERO:小于阈值的重新赋0,大于的不动
cv2.THRESH_TOZERO_INV:cv2.THRESH_TOZERO取反
cv2.THRESH_TRUNC:大于阈值的重新赋值为阈值
"""
ret, thresh = cv2.threshold(img, 127, 255, cv2.THRESH_BINARY)