zoukankan      html  css  js  c++  java
  • 5-8 彩色直方图均衡化

    # 本质: 统计每个像素灰度 出现的概率 0-255 p
    # 累计概率
    # 1 0.2 0.2 第一个灰度等级它出现的概率是0.2
    # 2 0.3 0.5 第二个灰度等级它出现的概率是0.3
    # 3 0.1 0.6 第三个灰度等级它出现的概率是0.1
    # 256
    # 100 0.5 255*0.5 = new 
    
    
    
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img = cv2.imread('image0.jpg',1)
    cv2.imshow('src',img)
    
    
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    #gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #cv2.imshow('src',gray)
    
    count_b = np.zeros(256,np.float)
    count_g = np.zeros(256,np.float)
    count_r = np.zeros(256,np.float)
    for i in range(0,height):
        for j in range(0,width):
            #pixel = gray[i,j]
            #index = int(pixel)
            #count[index] = count[index]+1
            (b,g,r) = img[i,j]
            index_b = int(b)
            index_g = int(g)
            index_r = int(r)
            count_b[index_b] = count_b[index_b]+1
            count_g[index_g] = count_g[index_g]+1
            count_r[index_r] = count_r[index_r]+1
    for i in range(0,255):
        count_b[i] = count_b[i]/(height*width)
        count_g[i] = count_g[i]/(height*width)
        count_r[i] = count_r[i]/(height*width)
    # 计算累计概率
    sum_b = float(0)
    sum_g = float(0)
    sum_r = float(0)
    for i in range(0,256):
        sum_b = sum_b+count_b[i]
        sum_g = sum_g+count_g[i]
        sum_r = sum_r+count_r[i]
        count_b[i] = sum_b
        count_g[i] = sum_g
        count_r[i] = sum_r
    #print(count)
    # 计算映射表
    map_b = np.zeros(256,np.uint16)
    map_g = np.zeros(256,np.uint16)
    map_r = np.zeros(256,np.uint16)
    for i in range(0,256):
        map_b[i] = np.uint16(count_b[i]*255)
        map_g[i] = np.uint16(count_g[i]*255)
        map_r[i] = np.uint16(count_r[i]*255)
    # 映射
    dst = np.zeros((height,width,3),np.uint8)
    for i in range(0,height):
        for j in range(0,width):
           #pixel = gray[i,j]# 获取当前的像素值
           #gray[i,j] = map1[pixel]
           (b,g,r) = img[i,j]
           b = map_b[b]
           g = map_g[g]
           r = map_r[r]
           dst[i,j] = (b,g,r)
    #cv2.imshow('dst',gray)
    cv2.imshow('dst',dst)
    cv2.waitKey(0)

    # 本质: 统计每个像素灰度 出现的概率 0-255 p
    # 累计概率
    # 1 0.2 0.2 第一个灰度等级它出现的概率是0.2
    # 2 0.3 0.5 第二个灰度等级它出现的概率是0.3
    # 3 0.1 0.6 第三个灰度等级它出现的概率是0.1
    # 256
    # 100 0.5 255*0.5 = new 
    
    
    
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img = cv2.imread('image0.jpg',1)
    cv2.imshow('src',img)
    
    
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    #gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #cv2.imshow('src',gray)
    
    count_b = np.zeros(256,np.float)
    count_g = np.zeros(256,np.float)
    count_r = np.zeros(256,np.float)
    for i in range(0,height):
        for j in range(0,width):
            #pixel = gray[i,j]
            #index = int(pixel)
            #count[index] = count[index]+1
            (b,g,r) = img[i,j]
            index_b = int(b)
            index_g = int(g)
            index_r = int(r)
            count_b[index_b] = count_b[index_b]+1
            count_g[index_g] = count_g[index_g]+1
            count_r[index_r] = count_r[index_r]+1
    for i in range(0,256):
        count_b[i] = count_b[i]/(height*width)
        count_g[i] = count_g[i]/(height*width)
        count_r[i] = count_r[i]/(height*width)
    # 计算累计概率
    sum_b = float(0)
    sum_g = float(0)
    sum_r = float(0)
    for i in range(0,256):
        sum_b = sum_b+count_b[i]
        sum_g = sum_g+count_g[i]
        sum_r = sum_r+count_r[i]
        count_b[i] = sum_b
        count_g[i] = sum_g
        count_r[i] = sum_r
    #print(count)
    # 计算映射表
    map_b = np.zeros(256,np.uint16)
    map_g = np.zeros(256,np.uint16)
    map_r = np.zeros(256,np.uint16)
    for i in range(0,256):
        map_b[i] = np.uint16(count_b[i]*255)
        map_g[i] = np.uint16(count_g[i]*255)
        map_r[i] = np.uint16(count_r[i]*255)
    # 映射
    dst = np.zeros((height,width,3),np.uint8)
    for i in range(0,height):
        for j in range(0,width):
           #pixel = gray[i,j]# 获取当前的像素值
           #gray[i,j] = map1[pixel]
           (b,g,r) = img[i,j]
           b = map_b[b]
           g = map_g[g]
           r = map_r[r]
           dst[i,j] = (b,g,r)
    #cv2.imshow('dst',gray)
    cv2.imshow('dst',dst)
    cv2.waitKey(0)

    # 本质: 统计每个像素灰度 出现的概率 0-255 p
    # 累计概率
    # 1 0.2 0.2 第一个灰度等级它出现的概率是0.2
    # 2 0.3 0.5 第二个灰度等级它出现的概率是0.3
    # 3 0.1 0.6 第三个灰度等级它出现的概率是0.1
    # 256
    # 100 0.5 255*0.5 = new 
    
    
    
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    img = cv2.imread('image2.jpg',1)
    cv2.imshow('src',img)
    
    
    imgInfo = img.shape
    height = imgInfo[0]
    width = imgInfo[1]
    #gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    #cv2.imshow('src',gray)
    
    count_b = np.zeros(256,np.float)
    count_g = np.zeros(256,np.float)
    count_r = np.zeros(256,np.float)
    for i in range(0,height):
        for j in range(0,width):
            #pixel = gray[i,j]
            #index = int(pixel)
            #count[index] = count[index]+1
            (b,g,r) = img[i,j]
            index_b = int(b)
            index_g = int(g)
            index_r = int(r)
            count_b[index_b] = count_b[index_b]+1
            count_g[index_g] = count_g[index_g]+1
            count_r[index_r] = count_r[index_r]+1
    for i in range(0,256):
        count_b[i] = count_b[i]/(height*width)
        count_g[i] = count_g[i]/(height*width)
        count_r[i] = count_r[i]/(height*width)
    # 计算累计概率
    sum_b = float(0)
    sum_g = float(0)
    sum_r = float(0)
    for i in range(0,256):
        sum_b = sum_b+count_b[i]
        sum_g = sum_g+count_g[i]
        sum_r = sum_r+count_r[i]
        count_b[i] = sum_b
        count_g[i] = sum_g
        count_r[i] = sum_r
    #print(count)
    # 计算映射表
    map_b = np.zeros(256,np.uint16)
    map_g = np.zeros(256,np.uint16)
    map_r = np.zeros(256,np.uint16)
    for i in range(0,256):
        map_b[i] = np.uint16(count_b[i]*255)
        map_g[i] = np.uint16(count_g[i]*255)
        map_r[i] = np.uint16(count_r[i]*255)
    # 映射
    dst = np.zeros((height,width,3),np.uint8)
    for i in range(0,height):
        for j in range(0,width):
           #pixel = gray[i,j]# 获取当前的像素值
           #gray[i,j] = map1[pixel]
           (b,g,r) = img[i,j]
           b = map_b[b]
           g = map_g[g]
           r = map_r[r]
           dst[i,j] = (b,g,r)
    #cv2.imshow('dst',gray)
    cv2.imshow('dst',dst)
    cv2.waitKey(0)

  • 相关阅读:
    eslint 的 env 配置是干嘛使的?
    cookie httpOnly 打勾
    如何定制 antd 的样式(theme)
    剑指 Offer 66. 构建乘积数组
    剑指 Offer 65. 不用加减乘除做加法
    剑指 Offer 62. 圆圈中最后剩下的数字
    剑指 Offer 61. 扑克牌中的顺子
    剑指 Offer 59
    剑指 Offer 58
    剑指 Offer 58
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/9745322.html
Copyright © 2011-2022 走看看