• opencv-python 图像基础处理(二)


    图像阈值

    ret, dst = cv2.threshold(src, thresh, maxval, type)

    - src: 输入图,只能输入单通道图像,通常来说为灰度图
    - dst: 输出图
    - thresh: 阈值 0-255 一般是127
    - maxval: 当像素值超过了阈值(或者小于阈值,根据type来决定),所赋予的值  最大值255
    - type:二值化操作的类型,包含以下5种类型: cv2.THRESH_BINARY; cv2.THRESH_BINARY_INV; cv2.THRESH_TRUNC; cv2.THRESH_TOZERO;cv2.THRESH_TOZERO_INV

    - cv2.THRESH_BINARY           超过阈值部分取maxval(最大值),否则取0
    - cv2.THRESH_BINARY_INV    THRESH_BINARY的反转
    - cv2.THRESH_TRUNC            大于阈值部分设为阈值,否则不变
    - cv2.THRESH_TOZERO          大于阈值部分不改变,否则设为0
    - cv2.THRESH_TOZERO_INV  THRESH_TOZERO的反转

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt#Matplotlib是RGB
    
    
    img=cv2.imread('d:/image0.jpg')
    img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    
    ret, thresh1 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY)
    ret, thresh2 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_BINARY_INV)
    ret, thresh3 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TRUNC)
    ret, thresh4 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO)
    ret, thresh5 = cv2.threshold(img_gray, 127, 255, cv2.THRESH_TOZERO_INV)
    
    titles = ['Original Image', 'BINARY', 'BINARY_INV', 'TRUNC', 'TOZERO', 'TOZERO_INV']
    images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]
    
    for i in range(6):
        plt.subplot(2, 3, i + 1), plt.imshow(images[i], 'gray')
        plt.title(titles[i])
        plt.xticks([]), plt.yticks([])
    plt.show()

     

     滤波处理

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt#Matplotlib是RGB
    
    
    img=cv2.imread('d:/image0.jpg')
    #cv2.imshow("image",img)
    #均值滤波
    bluer=cv2.blur(img,(3,3))
    
    #方框滤波
    #基本和均值一样,可以选择归一化
    box=cv2.boxFilter(img,-1,(3,3),normalize=True)
    
    #方框滤波
    #基本和均值一样,可以选择归一化,容易越界
    box2=cv2.boxFilter(img,-1,(3,3),normalize=False)
    res=np.hstack((bluer,box,box2))
    cv2.imshow("da",res)
     cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    #高斯滤波
    #高斯滤波得卷积核里地数值满足高斯分布,相当于中间地分布
    import cv2
    import numpy as np
    img=cv2.imread("d:/image0.jpg")
    aussian=cv2.GaussianBlur(img,(3,3),1)
    #均值滤波
    bluer=cv2.blur(img,(5,5))
    #中值滤波 median
    =cv2.medianBlur(img,5) res=np.hstack((aussian,bluer,median)) cv2.imshow("aussian vs averge",res) cv2.waitKey(0) cv2.destroyAllWindows()

  • 相关阅读:
    编译使用tinyxml
    GitLab 项目创建后地址由Localhost改为实际IP的方法
    树莓派相机设定
    MongoDB的数据备份与恢复
    Nginx PHP fpm forbidden 原因
    PSR2规范
    docker 日志管理
    Docker 拷贝文件
    Docker MySQL基本操作
    deepin安装php5.6
  • 原文地址:https://www.cnblogs.com/xujunjia/p/11440828.html
Copyright © 2020-2023  润新知