3-1
from cv2 import cv2
import numpy as np
def linearBroader(img, tarmax, tarmin, curmax=0, curmin=0):
img_shape = np.shape(img)
img_flatten = img.flatten()
curmax = max(img_flatten)
curmin = min(img_flatten)
for i in range(len(img_flatten)):
if(img_flatten[i] < tarmin):
img_flatten[i] = img_flatten[i] * curmin / tarmin
elif (img_flatten[i] < tarmax):
img_flatten[i] = (img_flatten[i] - curmin) * (tarmax - tarmin) / (curmax - curmin)
else:
img_flatten[i] = img_flatten[i] * (255 - curmax) / (255 - tarmax) + curmax
return img_flatten.reshape(img_shape)
def nonLinearBroader(img, c):
img_shape = np.shape(img)
img_flatten = img.flatten()
for i in range(len(img_flatten)):
img_flatten[i] *= c
return img_flatten.reshape(img_shape)
def histogramRandomGray(img):
histr = cv2.calcHist([img.flatten()], [0], None, [256], [0, 255])
tem = histr.flatten()
tol = sum(tem)
img_flatten = img.flatten()
img_shape = np.shape(img)
for i in range(len(img_flatten)):
img_flatten[i] = int(255 * sum(tem[0: int(img_flatten[i])+1]) / tol)
return img_flatten.reshape(img_shape)
img = cv2.imread("C:\\test\\1.jpg")
gray0 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
line0 = linearBroader(gray0, 250, 0)
non0 = nonLinearBroader(gray0, 1.05)
hist0 = histogramRandomGray(gray0)
cv2.imshow("img", img)
cv2.imshow("gray0", gray0)
cv2.imshow('line0', line0)
cv2.imshow('non0', non0)
cv2.imshow('hist0', hist0)
cv2.waitKey()
cv2.destroyAllWindows
```python
# 发现直方图均衡化有默认的方法
# hist0= cv2.equalizeHist(img)