在OpenCV中生成格栅(栅格)图像可以通过多种方法实现,以下是两种常用且有效的方法:
一、使用 `cv2.fillPoly` 填充规则图案
定义网格参数 确定网格的行数、列数以及每个网格的大小(如像素尺寸)。
创建掩码矩阵
使用 `numpy` 创建一个与目标图像大小相同的二值掩码矩阵,其中包含规则的多边形区域对应网格位置。
填充规则图案
利用 `cv2.fillPoly` 函数,将掩码矩阵中定义的多边形区域填充为指定颜色(如白色)。
示例代码(生成5x5像素的细密格栅):
```python
import cv2
import numpy as np
定义网格参数
rows, cols = 5, 5
cell_size = 50 每个网格单元的像素大小
grid_size = (cols * cell_size, rows * cell_size)
image = np.zeros(grid_size, dtype=np.uint8)
创建掩码矩阵,定义5x5的规则多边形
polygons = np.array([[
[0, 0],
[cols * cell_size, 0],
[cols * cell_size, rows * cell_size],
[0, rows * cell_size]
] for _ in range(rows * cols)], dtype=np.int32)
填充规则图案
cv2.fillPoly(image, [polygons], (255, 255, 255)) 填充为白色
可视化结果
cv2.imshow('Grid', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
二、使用 `cv2.createGrid` 生成结构化网格
OpenCV 提供了 `cv2.createGrid` 函数,可快速生成带有坐标信息的结构化网格,适用于需要标注坐标或进行坐标相关操作的场景。
示例代码(生成5x5像素的格栅并标注坐标):
```python
import cv2
import numpy as np
定义网格参数
rows, cols = 5, 5
cell_size = 50 每个网格单元的像素大小
grid = cv2.createGrid((cols, rows), cell_size, dtype=np.float32)
将浮点坐标转换为整数坐标
grid = grid.astype(np.int32)
可视化结果
cv2.imshow('Structured Grid', grid)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
选择方法建议
规则填充需求: 若仅需生成填充后的静态图像,推荐使用 `cv2.fillPoly`,灵活且高效。 坐标标注需求
以上方法均需根据具体需求调整网格参数(如尺寸、颜色等),并通过可视化工具(如 `cv2.imshow`)观察效果。