利用python及python中的opencv,生成大小512×512的黑底(灰度值为0),中央有200×200大小白色(灰度值为255)正方形图像,用表格形式列出各灰度统计个数,并绘制该图像的灰度直方图。
时间: 2024-10-20 17:13:45 浏览: 32
python opencv 二值化 计算白色像素点的实例
在Python中使用OpenCV创建这样的图像并进行灰度统计以及直方图绘制,你可以按照以下步骤操作:
1. 导入必要的库:
```python
import cv2
import numpy as np
```
2. 创建黑色背景的512x512图像,所有像素值设为0(灰度值):
```python
image = np.zeros((512, 512, 1), dtype=np.uint8)
```
注意这里设置的是单通道的灰度图像。
3. 在图像中心添加一个200x200的白色正方形,灰度值设为255:
```python
center_x, center_y = image.shape[1] // 2 - 100, image.shape[0] // 2 - 100
white_square = np.full((200, 200, 1), 255, dtype=np.uint8)
image[center_y:center_y+200, center_x:center_x+200] = white_square
```
4. 计算灰度像素统计,这里可以直接遍历图像数组,记录每个灰度值出现的次数:
```python
gray_counts = {}
for row in image.flatten():
if row != 0 and row != 255:
gray_counts[row] = gray_counts.get(row, 0) + 1
```
5. 绘制直方图:
```python
hist, bins = np.histogram(image.flatten(), bins=range(256))
cv2.normalize(hist, hist, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX)
# 创建一个新的图像来显示直方图
histogram_image = np.zeros_like(image)
for i, count in enumerate(hist):
histogram_image[:, int((i+1)*bins[1]/255):int((i+2)*bins[1]/255)] = [count]*255
# 显示原图像和直方图
cv2.imshow("Image with White Square", image)
cv2.imshow("Histogram Image", histogram_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
以上代码将生成指定的图像,并显示出灰度直方图。
阅读全文