使用opencv写一个洪水填充
时间: 2023-11-14 13:57:04 浏览: 45
好的,以下是使用OpenCV实现洪水填充的示例代码:
```python
import cv2
# 读取图像
img = cv2.imread('input.jpg')
# 洪水填充
cv2.floodFill(img, None, (50, 50), (0, 255, 0))
# 显示结果
cv2.imshow('flood fill', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
解释一下代码:
- 第一行导入了OpenCV库;
- 第三行使用`cv2.imread()`函数读取输入图像;
- 第六行使用`cv2.floodFill()`函数进行洪水填充,其中参数含义如下:
- 第一个参数是待填充的图像;
- 第二个参数是掩码图像,如果为`None`则表示填充整个图像;
- 第三个参数是起始点坐标;
- 第四个参数是填充颜色;
- 其他参数可以参考OpenCV官方文档;
- 第九行使用`cv2.imshow()`函数显示填充后的图像;
- 最后两行使用`cv2.waitKey()`和`cv2.destroyAllWindows()`函数等待用户按下键盘并关闭窗口。
你可以将代码保存为`flood_fill.py`并将`input.jpg`放置在同一目录下,然后运行代码即可看到结果。
相关问题
使用opencv写一个洪水填充的代码,填充颜色为蓝色
好的,以下是使用OpenCV进行洪水填充的Python代码示例:
```python
import cv2
# 读取原始图片
img = cv2.imread('input.jpg')
# 创建一个掩码,大小和原始图片一致
mask = np.zeros_like(img[:,:,0])
# 定义填充起始点的坐标
start_point = (100, 100)
# 定义填充的颜色
fill_color = (255, 0, 0)
# 定义填充的种子点,即填充起始点的像素值
seed_point = img[start_point[1], start_point[0]]
# 使用洪水填充算法,填充掩码
cv2.floodFill(img, mask, start_point, fill_color, seed_point, (10, 10, 10), (10, 10, 10), cv2.FLOODFILL_FIXED_RANGE)
# 显示填充后的图片
cv2.imshow('image', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,`cv2.floodFill()`函数的参数含义如下:
- `img`:要填充的原始图片;
- `mask`:填充掩码,要求大小和原始图片一致,初始值为0;
- `start_point`:填充的起始点坐标;
- `fill_color`:填充颜色;
- `seed_point`:填充种子点,即填充起始点的像素值;
- `(10, 10, 10)`和`(10, 10, 10)`:填充的颜色范围,表示填充的像素值与种子点像素值之间允许的最大差值;
- `cv2.FLOODFILL_FIXED_RANGE`:填充模式,表示采用固定范围填充。
以上代码将会在起始点`(100, 100)`开始填充,填充颜色为蓝色。
opencv 写一段图片孔洞填充
下面是一段使用OpenCV库实现图片孔洞填充的Python代码:
```python
import cv2
import numpy as np
# 读取图片并转换为灰度图
img = cv2.imread('image.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化处理,将图像转换为黑白
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找图像中的轮廓
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 填充孔洞
for i in range(len(contours)):
cv2.drawContours(thresh, contours, i, 255, -1)
# 显示结果
cv2.imshow('image', img)
cv2.imshow('filled', thresh)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
代码中首先读取一张图片并将其转换为灰度图,然后使用二值化处理将图像转换为黑白。接着使用`cv2.findContours()`函数查找图像中的轮廓,这里使用`cv2.RETR_EXTERNAL`参数表示只查找最外层的轮廓。最后使用`cv2.drawContours()`函数将轮廓内部的孔洞填充。最终结果显示原图和填充后的图像。