获取一张灰度图像像素直方图分布 代码
时间: 2024-02-18 13:06:06 浏览: 38
以下是Python实现的获取一张灰度图像像素直方图分布的代码:
```python
import cv2
import numpy as np
import matplotlib.pyplot as plt
# 读入灰度图像
img = cv2.imread('image.jpg', 0)
# 计算像素直方图
hist, bins = np.histogram(img.flatten(), 256, [0, 256])
# 绘制直方图
plt.hist(img.flatten(), 256, [0, 256], color='r')
plt.xlim([0, 256])
plt.xlabel('Pixel value')
plt.ylabel('Number of pixels')
plt.show()
```
代码中使用了 `numpy` 库的 `histogram()` 函数来计算像素直方图,其中参数含义如下:
- `img.flatten()`:将图像转换为一维数组
- `256`:直方图的大小
- `[0, 256]`:像素值的范围
可以根据实际情况调整参数,以达到最佳效果。最后使用 `matplotlib` 库绘制直方图,可视化显示像素值直方图分布情况。
相关问题
获取一张灰度图像像素值分布 代码
以下是Python实现的获取一张灰度图像像素值分布的代码:
```python
import cv2
import matplotlib.pyplot as plt
# 读入灰度图像
img = cv2.imread('image.jpg', 0)
# 统计像素值分布
hist = cv2.calcHist([img], [0], None, [256], [0, 256])
# 绘制直方图
plt.plot(hist)
plt.xlim([0, 256])
plt.xlabel('Pixel value')
plt.ylabel('Number of pixels')
plt.show()
```
代码中使用了 `cv2.calcHist()` 函数统计灰度图像的像素值分布,其中参数含义如下:
- `images`:输入图像
- `channels`:需要统计的通道,对于灰度图像只需传入 `[0]`
- `mask`:掩码图像,用于只统计指定区域的像素值分布,一般为 `None`
- `histSize`:直方图的大小,一般为256
- `ranges`:像素值范围,一般为 `[0, 256]`
可以根据实际情况调整参数,以达到最佳效果。最后使用 `matplotlib` 库绘制直方图,可视化显示像素值分布情况。
对灰度图像进行直方图均衡处理matlab代码
以下是对灰度图像进行直方图均衡处理的MATLAB代码示例:
```matlab
% 读入灰度图像
img = imread('lena.jpg');
% 计算图像直方图
histogram = imhist(img);
% 计算累积直方图
cdf = cumsum(histogram) / numel(img);
% 对原图像进行直方图均衡处理
eq_img = uint8(255 * cdf(img + 1));
% 显示处理前后的图像
subplot(1,2,1), imshow(img), title('原图像');
subplot(1,2,2), imshow(eq_img), title('均衡化后的图像');
```
这段代码中,首先使用 imread() 函数读入一张灰度图像,然后使用 imhist() 函数计算图像的直方图。接着,使用 cumsum() 函数计算累积直方图,并将其除以图像像素总数得到概率密度函数。最后,使用 cdf() 函数将原图像进行直方图均衡处理,得到均衡化后的图像。最后使用 subplot() 和 imshow() 函数将处理前后的图像显示在同一窗口中。
需要注意的是,这里使用的 cdf() 函数和 cumsum() 函数是自己定义的函数,代码如下:
```matlab
function y = cdf(x)
y = zeros(size(x));
for i = 1:numel(x)
y(i) = sum(x(1:i));
end
```
```matlab
function y = cumsum(x)
y = zeros(size(x));
for i = 1:numel(x)
y(i) = sum(x(1:i));
end
```
这两个函数都是利用循环计算给定向量的累积和。在实际使用中,也可以直接使用 MATLAB 自带的 cumsum() 函数代替这两个函数。