1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| import matplotlib.pyplot as plt import cv2 as cv import numpy as np import os
def show(img): if img.ndim == 2: plt.imshow(img, cmap='gray', vmin=0, vmax=255) else: plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB)) plt.show()
piclist = ["calligraphy/fig{}.jpg".format(i+1) for i in range(4)] graylist = []
for i in piclist: if not os.path.exists(i): print("图像不存在") continue img = cv.imread(i, 0) graylist.append(img)
hists = [cv.calcHist([img], [0], None, [256], [0, 256]) for img in graylist]
sum_hist = np.sum(hists, axis=0) avg_hist = sum_hist / len(graylist) style_hist = avg_hist
source_img_path = 'apply/fig3.jpg' source_img = cv.imread(source_img_path, 0)
source_hist = cv.calcHist([source_img], [0], None, [256], [0, 256])
source_cdf = source_hist.cumsum() / source_img.size
style_cdf = style_hist.cumsum() / graylist[0].size
mapping = np.zeros(256, dtype=np.uint8) for i in range(256): diff = np.abs(source_cdf[i] - style_cdf) mapping[i] = np.argmin(diff)
applyed_img = cv.LUT(source_img, mapping) show(applyed_img)
|