如何对二值化的地图进行分格,只分格白色的通道部分,而跳过黑色的墙体,opencv代码如何编写
时间: 2023-06-13 11:03:08 浏览: 63
可以使用OpenCV中的轮廓检测函数`findContours()`来实现对白色通道部分的分格。
具体步骤如下:
1. 首先,将二值化的地图读入到OpenCV中;
2. 对读入的地图进行轮廓检测,可以使用`findContours()`函数,得到所有白色通道区域的轮廓;
3. 对每个白色通道区域的轮廓,使用`boundingRect()`函数,得到该区域的外接矩形;
4. 根据外接矩形的左上角坐标和宽高,可以计算出该区域在地图上的行列数;
5. 将所有白色通道区域分别存储到对应的行列数的数组中,即可完成分格。
下面是代码示例:
```python
import cv2
import numpy as np
# 读入二值化的地图
img = cv2.imread('map.jpg', cv2.IMREAD_GRAYSCALE)
# 进行轮廓检测
contours, _ = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 分配行列数组
rows, cols = img.shape
grid = np.zeros((rows, cols), dtype=np.uint8)
# 遍历所有白色通道区域
for cnt in contours:
# 计算外接矩形
x, y, w, h = cv2.boundingRect(cnt)
# 计算行列数
grid_rows = int(np.ceil(h / 10))
grid_cols = int(np.ceil(w / 10))
# 分格
for i in range(grid_rows):
for j in range(grid_cols):
row = int((y + i * 10) / 10)
col = int((x + j * 10) / 10)
if row < rows and col < cols:
grid[row][col] = 1
# 显示分格结果
cv2.imshow('grid', grid * 255)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中`10`是指每个格子的像素大小,可以根据实际情况修改。`grid`数组中,白色表示通道部分,黑色表示墙体部分。
阅读全文