如何利用OpenCV+python将分层设色地形图转化为等高线地形图
时间: 2023-05-24 20:07:04 浏览: 253
SIFT特征点提取和RASIC算法 OpenCV+Python图像拼接(全景图片拼接技术)(python)
步骤如下:
1. 读取地形图,用imread函数将其转化为矩阵格式。
示例代码:
```
import cv2
import numpy as np
terrain = cv2.imread('terrain.png', 0) # 读取灰度图
```
2. 设定等高线高度值,用numpy的arange函数生成一组等差数列,作为等高线高度值。
示例代码:
```
contour_levels = np.arange(25, 225, 25) # 等高线高度从25到225,间隔为25
```
3. 利用cv2.findContours函数寻找等高线。
cv2.findContours函数用于寻找连通的轮廓。其中,输入参数为二值化图像,输出参数为轮廓集合和各自的层级关系(可省略),返回值为寻找到的轮廓。
示例代码:
```
contours, hierarchy = cv2.findContours(terrain, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
```
4. 用cv2.drawContours函数将等高线绘制到新的图像上。
cv2.drawContours函数用于绘制轮廓。其中,输入参数为目标图像、轮廓集合、轮廓索引(-1表示绘制所有轮廓)、颜色、线宽度等。
示例代码:
```
contour_img = np.zeros_like(terrain)
cv2.drawContours(contour_img, contours, -1, (255, 255, 255), 1) # 将所有轮廓绘制到新图像上
```
5. 保存等高线图像。
示例代码:
```
cv2.imwrite('contour.png', contour_img)
```
完整代码:
```
import cv2
import numpy as np
terrain = cv2.imread('terrain.png', 0) # 读取灰度图
contour_levels = np.arange(25, 225, 25) # 等高线高度从25到225,间隔为25
contours, hierarchy = cv2.findContours(terrain, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contour_img = np.zeros_like(terrain)
cv2.drawContours(contour_img, contours, -1, (255, 255, 255), 1) # 将所有轮廓绘制到新图像上
cv2.imwrite('contour.png', contour_img)
```
其中,terrain.png为分层设色地形图,输出的contour.png为等高线地形图。
阅读全文