照一张比较暗图,特别是在暗部需要我们对其进行处理,提亮暗部有不让其他部位出现曝光的情况。这是一个比较简单处理图片的工作。
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)
虽然图片整体变量但是图片有点偏灰,我们需要适当地补充一些饱和度。