OpenCV4通过findContours找到指定轮廓后用drawContours填充制作掩膜
时间: 2023-10-14 21:28:01 浏览: 73
使用OpenCV4中的findContours函数可以找到指定轮廓,然后可以使用drawContours函数来填充制作掩膜。
以下是一个基本的示例代码:
```python
import cv2
# 读取图像
img = cv2.imread('test.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 阈值化
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# 查找轮廓
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 创建掩膜
mask = np.zeros_like(img)
# 绘制轮廓
cv2.drawContours(mask, contours, 0, (255, 255, 255), -1)
# 显示结果
cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在这个示例中,我们首先读取了一张测试图像,并将其转换为灰度图像。然后对灰度图像进行二值化处理,以便更好地查找轮廓。
接下来,我们使用findContours函数查找轮廓,并使用drawContours函数将轮廓绘制在掩膜上。最后,我们显示了生成的掩膜。
请注意,这只是一个简单的示例,你可能需要根据你的具体需求进行更改和调整。
相关问题
OpenCV4通过findContours找到指定轮廓后用drawContours填充制作掩膜,c++
使用OpenCV4中的`findContours`函数可以找到指定的轮廓,然后使用`drawContours`函数填充制作掩膜,具体步骤如下:
1. 首先读入需要处理的图像,转化为灰度图像。
```c++
Mat img = imread("image.jpg");
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
```
2. 对灰度图像进行二值化处理,得到二值图像。
```c++
Mat binary;
threshold(gray, binary, 100, 255, THRESH_BINARY);
```
3. 使用`findContours`函数找到指定的轮廓,并存储在一个向量中。
```c++
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
```
4. 创建一个与原图像大小相同的掩膜,并使用`drawContours`函数填充指定轮廓。
```c++
Mat mask = Mat::zeros(img.size(), CV_8UC1);
Scalar color(255, 255, 255);
drawContours(mask, contours, 0, color, FILLED);
```
5. 最后将掩膜应用于原图像,得到指定轮廓部分的图像。
```c++
Mat result;
img.copyTo(result, mask);
```
完整代码如下:
```c++
#include <opencv2/opencv.hpp>
using namespace cv;
int main()
{
Mat img = imread("image.jpg");
Mat gray;
cvtColor(img, gray, COLOR_BGR2GRAY);
Mat binary;
threshold(gray, binary, 100, 255, THRESH_BINARY);
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(binary, contours, hierarchy, RETR_TREE, CHAIN_APPROX_SIMPLE);
Mat mask = Mat::zeros(img.size(), CV_8UC1);
Scalar color(255, 255, 255);
drawContours(mask, contours, 0, color, FILLED);
Mat result;
img.copyTo(result, mask);
imshow("result", result);
waitKey(0);
return 0;
}
```
注意:上述代码仅针对单个轮廓进行操作。如果需要处理多个轮廓,需要在`findContours`函数中指定轮廓检测模式和轮廓逼近方法,并根据需要对轮廓进行筛选和分组。
python怎么通过轮廓制作掩膜
在Python中,可以通过OpenCV库来实现通过轮廓制作掩膜。下面是一个简单的示例代码:
```python
import cv2
# 读取图像并转换为灰度图像
img = cv2.imread('example.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 进行边缘检测
edges = cv2.Canny(gray, 100, 200)
# 查找轮廓
contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 创建空白掩膜
mask = np.zeros_like(img)
# 绘制轮廓
cv2.drawContours(mask, contours, -1, (255, 255, 255), thickness=-1)
# 显示掩膜
cv2.imshow('mask', mask)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
这段代码首先读取一张图像,并将其转换为灰度图像。接着,使用OpenCV的边缘检测函数进行边缘检测。然后,使用OpenCV的查找轮廓函数查找图像中的轮廓。接下来,创建一个与原始图像大小相同的空白掩膜。最后,使用OpenCV的绘制轮廓函数将轮廓绘制在掩膜上,并显示掩膜。
需要注意的是,绘制轮廓时,通过参数`thickness=-1`将轮廓填充,从而得到掩膜。