编程实现绘制图像的灰度直方图、均衡化后的灰度直方图以及对比图
时间: 2024-05-23 09:16:39 浏览: 14
好的,这个问题可以回答。要实现绘制图像的灰度直方图和均衡化后的灰度直方图,我们可以使用Python里面的OpenCV库。第一步是读入要处理的图像,然后将其转化为灰度图像。接着,我们可以使用cv2.calcHist()函数来计算灰度直方图,再使用matplotlib.pyplot.plot()函数绘制直方图。实现均衡化后的灰度直方图,我们只需要在计算直方图时调用cv2.equalizeHist()函数对原灰度图像进行均衡化即可。
对比图则需要绘制两张灰度图像的灰度直方图,并将其放在同一张图上以方便比较。具体做法是先计算两张图像的灰度直方图,然后分别使用两种不同的颜色在同一张图上绘制直方图即可。
需要注意的是,图像处理中涉及到的一些技术和方法可能涉及到一些知识产权问题,因此我们需要遵循相关法律法规。
相关问题
编程画出图像的灰度直方图,均衡化后的灰度直方图
很高兴为您解答问题。可以使用Python中的OpenCV库进行图像处理。以下是代码示例:
```python
import cv2
import numpy as np
from matplotlib import pyplot as plt
# 读入图像
img = cv2.imread('image.jpg', 0)
# 计算灰度直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
cdf = hist.cumsum() # 计算累积直方图
cdf_normalized = cdf * hist.max() / cdf.max() # 归一化
# 绘制灰度直方图和累积直方图
plt.subplot(2, 2, 1)
plt.imshow(img, cmap='gray')
plt.title('Original Image')
plt.subplot(2, 2, 2)
plt.hist(img.flatten(), 256, [0, 256])
plt.title('Histogram')
plt.subplot(2, 2, 3)
plt.plot(cdf_normalized, color='b')
plt.hist(img.flatten(), 256, [0, 256], cumulative=True, normed=True, color='r')
plt.title('Cumulative Histogram')
plt.subplot(2, 2, 4)
equ = cv2.equalizeHist(img) # 均衡化
plt.imshow(equ, cmap='gray')
plt.title('Histogram Equalization')
plt.show()
```
运行后,代码将展示原始图像、灰度直方图、累积直方图和均衡化后的图像灰度直方图。
自己用python代码编写函数实现灰度直方图统计以及灰度直方图均衡化,并绘制灰度直方图及均衡化后的灰度直方图,显示初始图像及均衡化后的图像
好的,以下是Python代码实现:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 灰度直方图统计
def calcGrayHist(image):
# 计算图像的灰度直方图
rows, cols = image.shape
grayHist = np.zeros([256], np.uint64)
for r in range(rows):
for c in range(cols):
grayHist[image[r][c]] += 1
return grayHist
# 灰度直方图均衡化
def equalizeHist(image):
# 获取灰度直方图
grayHist = calcGrayHist(image)
# 计算累计灰度直方图
zeroCumuMoment = np.zeros([256], np.uint64)
for p in range(len(grayHist)):
if p == 0:
zeroCumuMoment[p] = grayHist[0]
else:
zeroCumuMoment[p] = zeroCumuMoment[p-1] + grayHist[p]
# 计算映射表
pixelNum = image.shape[0] * image.shape[1]
zeroCumuMoment = np.round(zeroCumuMoment / pixelNum * 255)
histEqImage = np.zeros(image.shape, np.uint8)
for r in range(image.shape[0]):
for c in range(image.shape[1]):
histEqImage[r][c] = zeroCumuMoment[image[r][c]]
return histEqImage
# 读取图像
image = cv2.imread('test.png', 0)
# 统计灰度直方图
grayHist = calcGrayHist(image)
# 绘制灰度直方图
plt.figure()
plt.bar(range(256), grayHist, width=1.0, edgecolor='none')
plt.title('Gray Histogram')
plt.xlabel('Gray Level')
plt.ylabel('Pixel Number')
plt.show()
# 灰度直方图均衡化
histEqImage = equalizeHist(image)
# 统计均衡化后的灰度直方图
histEq = calcGrayHist(histEqImage)
# 绘制均衡化后的灰度直方图
plt.figure()
plt.bar(range(256), histEq, width=1.0, edgecolor='none')
plt.title('Equalized Histogram')
plt.xlabel('Gray Level')
plt.ylabel('Pixel Number')
plt.show()
# 显示初始图像
cv2.imshow('Original Image', image)
# 显示均衡化后的图像
cv2.imshow('Histogram Equalization Image', histEqImage)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`calcGrayHist` 函数用于计算图像的灰度直方图,`equalizeHist` 函数用于实现灰度直方图均衡化。代码中还包括绘制灰度直方图和均衡化后的灰度直方图的函数,以及显示初始图像和均衡化后的图像的相关代码。