opencv项目实战-1基础知识

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)

 

上一篇:史上最简单&最全&最基础&入门到精通的opencv图像处理 第七课:图像阈值


下一篇:青蛙跳台阶问题