面向对象的水体提取代码
时间: 2023-11-20 09:03:35 浏览: 28
以下是一个简单的面向对象的水体提取代码示例:
```python
class WaterExtractor:
def __init__(self, image_path):
self.image = cv2.imread(image_path)
self.mask = np.zeros_like(self.image)
def extract_water(self):
# 灰度化
gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
# 阈值分割
ret, thresh = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 轮廓检测
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 筛选出水体轮廓
for i in range(len(contours)):
area = cv2.contourArea(contours[i])
if area > 5000 and area < 500000:
cv2.drawContours(self.mask, contours, i, (255, 255, 255), -1, cv2.LINE_8, hierarchy, 0)
# 转换为二值图像
self.mask = cv2.cvtColor(self.mask, cv2.COLOR_BGR2GRAY)
ret, self.mask = cv2.threshold(self.mask, 127, 255, cv2.THRESH_BINARY)
def save_mask(self, save_path):
cv2.imwrite(save_path, self.mask)
```
使用方法:
```python
# 创建水体提取器
we = WaterExtractor("image.jpg")
# 提取水体
we.extract_water()
# 保存水体掩模
we.save_mask("mask.png")
```
这个示例代码实现了一个简单的水体提取器。首先读入一张图片,然后使用阈值分割和轮廓检测等方法,筛选出水体轮廓,并将其转换为二值图像。最后可以将水体掩模保存到指定路径。