深度学习数字图像处理与计算机视觉(python)OpenCV

计算机视觉 OpenCV (22)

2019-08-20  本文已影响20人  zidea

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


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)

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

上一篇下一篇

猜你喜欢

热点阅读