zoukankan      html  css  js  c++  java
  • 直方图 与 均衡化

    对图像求直方图,即统计每个像素值有多少个点

    第一个参数为图像,第二个参数为图像通道(0表示灰度图),第三个参数为掩膜(None表示没有)

    第四个参数为直方图中有多少柱子,第五个参数为统计像素值的范围

    img_x = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    
    hist = cv2.calcHist([img_x], [0], None, [256], [0, 255])
    plt.hist(img_x.ravel(), 256)
    plt.show()

    加掩膜:

    #创建一个全黑掩膜(都为0),
    cover = np.zeros(img_x.shape[0 : 2], dtype = np.uint8)
    #特定区域设为255,即为白色,白色区域为不遮挡区域
    cover[100 : 500, 30 : 500] = 255
    cover_img = cv2.bitwise_and(img_x, img_x, mask = cover)
    cv2.imshow('cover', cover_img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    #hist_cover = cv2.calcHist([cover_img], [0], None, [256], [0, 255])
    hist_cover = cv2.calcHist([img_x], [0], cover, [256], [0, 255])
    plt.hist(cover_img.ravel(), 256)
    plt.show()

    均衡化:

    将密集的直方图均衡一下

    原理:

    统计每个像素值的个数和其所占所有像素个数的比例,以及其累积概率(即概率前缀和)

    用累积概率 * 255 四舍五入,即得均衡后当前像素值所对应的像素值

    img_x = cv2.cvtColor(img1, cv2.COLOR_BGR2GRAY)
    
    hist = cv2.calcHist([img_x], [0], None, [256], [0, 255])
    
    plt.hist(img_x.ravel(), 256)
    plt.show()
    #均衡化操作,返回一个均衡后后的图像
    img_equ = cv2.equalizeHist(img_x)
    hist_equ = cv2.calcHist([img_equ], [0], None, [256], [0, 255])
    plt.hist(img_equ.ravel(), 256)
    plt.show()
    
    img = np.hstack((img_x, img_equ))
    cv2.imshow('img', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    局部均衡化:

    即将一张图片分为若干格子,每个格子分别各自进行均衡化(可以防止个别细节消息,但噪声会造成影响)

    clahe = cv2.createCLAHE(clipLimit = 2.0, tileGridSize = (8, 8))
    img_clahe = clahe.apply(img_x)
    hist_clahe = cv2.calcHist([img_clahe], [0], None, [256], [0, 255])
    plt.hist(img_clahe.ravel(), 256)
    plt.show()
    
    img_total = np.hstack((img_x, img_equ, img_clahe))
    
    
    cv2.imshow('img_total', img_total)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

     

    自己选择的路,跪着也要走完。朋友们,虽然这个世界日益浮躁起来,只要能够为了当时纯粹的梦想和感动坚持努力下去,不管其它人怎么样,我们也能够保持自己的本色走下去。
  • 相关阅读:
    Opengl编程指南第三章:视图
    OpenGL编程指南第四章:颜色
    OpenGL编程指南第七章:显示列表
    推荐:字体、排版简明入门
    OpenGL编程指南第八章:绘制像素、位图、字体和图像
    推荐:字体、排版简明入门
    OpenGL编程指南第五章:光照
    转载一篇密码学基本介绍
    ARM_异常和中断学习笔记
    ARM指令学习笔记
  • 原文地址:https://www.cnblogs.com/WTSRUVF/p/15259003.html
Copyright © 2011-2022 走看看