计算机视觉 OpenCV (22)

作者: zidea | 来源:发表于2019-08-20 20:56 被阅读20次

    照一张比较暗图,特别是在暗部需要我们对其进行处理,提亮暗部有不让其他部位出现曝光的情况。这是一个比较简单处理图片的工作。


    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    def calGrayHist(img):
        print(img.shape)
        rows, cols,_ = img.shape
        grayHist = np.zeros([256],np.uint64)
        for r in xrange(rows):
            for c in xrange(cols):
                grayHist[img[r][c]] += 1
        return grayHist
    

    xrange 用法与 range 完全相同,所不同的是生成的不是一个 list对象,而是一个生成器。方法接收一张图片作为输入。

    img = cv2.imread('livingroom.jpg',cv2.COLOR_BGR2GRAY)
    grayHist = calGrayHist(img)
    x_range = range(256)
    plt.plot(x_range,grayHist,'r',linewidth=2,c='black')
    y_maxVaue = np.max(grayHist)
    plt.xlabel('gray level')
    plt.ylabel('number of pixels')
    plt.show()
    
    

    图表示整张图片像素的分布,因为我们只关心图片明暗,所以先将图片变为一张灰度图,通过黑白像素可以反映图片的明暗。因为是 8 位即取值范围 0 - 255 的图。这是 x 轴方向,纵轴表示在某点灰度值上像素的数量。

    
    import cv2
    import numpy as np
    
    I = cv2.imread('gof_cover.jpg',cv2.COLOR_BGR2GRAY)
    
    a = 2
    Out = float(a) * I
    Out[Out>255] = 255
    
    Out = np.round(Out)
    Out = Out.astype(np.uint8)
    
    cv2.imshow("I",I)
    cv2.imshow("O",Out)
    
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    

    我们对图像进行数据通常用 I 表示输入图像 W 表示宽度,用 H 表示高度。r 表示像素行位置而用 c 表示列位置。
    有关增亮有几种方式

    伽马值

    gamma 取值范围 0 到 1 可以增加图片对比度,当 gmma 值大于 1 时候降低图片对比值。首先我们需要对图像进行处理将像素值压缩到 0 - 1 范围内

    import cv2
    import numpy as np
    
    src = cv2.imread('livingroom.jpg')
    gamma = 0.5
    
    dst = src/255.0
    dst = np.power(dst,gamma)
    cv2.imshow('src',src)
    cv2.imshow('dst',dst)
    

    虽然图片整体变量但是图片有点偏灰,我们需要适当地补充一些饱和度。

    相关文章

      网友评论

        本文标题:计算机视觉 OpenCV (22)

        本文链接:https://www.haomeiwen.com/subject/gljljctx.html