#彩色直方图源码实现 #本质:统计每个像素灰度出现的概率X:0-255, Y:P import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('image0.jpg',1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] count_b = np.zeros(256, np.float) count_g = np.zeros(256, np.float) count_r = np.zeros(256, np.float) for i in range(0, height): for j in range(0, width): (b, g, r) = img[i, j] index_b = int(b) index_g = int(g) index_r = int(r) count_b[index_b] = count_b[index_b] + 1 count_g[index_g] = count_g[index_g] + 1 count_r[index_r] = count_r[index_r] + 1 for i in range(0, 256): count_b[i] = count_b[i] / (height * width) count_g[i] = count_g[i] / (height * width) count_r[i] = count_r[i] / (height * width) x = np.linspace(0, 255,256) y1 = count_b plt.figure() plt.bar(x, y1, 0.9, alpha=1, color='b') y2 = count_g plt.figure() plt.bar(x, y2, 0.9, alpha=1, color='g') y3 = count_r plt.figure() plt.bar(x, y, 0.9, alpha=1, color='r') plt.show() cv2.waitKey(0) #灰度直方图均衡化 #本质:统计每一个像素灰度,出现的概率,X:0-255,Y:P #累计概率:随像素由0-255增加,对各像素的概率进行累积求概率和,然后像素用新概率*255进行代替 import cv2 import numpy as np import matplotlib.pyplot as plt img = cv2.imread('image0.jpg', 1) imgInfo = img.shape height = imgInfo[0] width = imgInfo[1] #求取灰度图 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) count = np.zeros(256, np.float) for i in range(0,height): for j in range(0,width): pixel = gray[i, j] index = int[pixel] count[index] = count[index] +1 for i in range(0, 255): count[i] = count[i] / (height * width) #计算累计概率 sum1 = float(0) #计算累计概率 for i in range(0,255): sum1 = sum1 + count[i] count[i] = sum1 # print(count),couture[i]最后趋于1 #计算映射表 map1 = np.zeros(256, np.uint8) for i in range(0,256): map1[i] = np.uint(count[i] * 255) #映射 for i in range(0, height): for j in range(0,width): pixel = gray[i, j] gray[i, j] = map1[pixel] cv2.imshow('dst', gray) cv2.waitKey(0)
图像处理:彩色直方图和灰度直方图实现源码
最新推荐文章于 2024-10-07 09:53:29 发布