android opencv得到轮廓内的图像
时间: 2023-07-24 12:21:43 浏览: 104
要得到轮廓内的图像,可以使用OpenCV的`findContours`函数找到轮廓,并使用`drawContours`函数将轮廓绘制在一张黑色背景图像上。然后使用`cv::fillPoly`函数将轮廓内部填充为白色,最后得到的图像即为轮廓内的图像。
以下是示例代码:
```c++
// 读取图像
cv::Mat image = cv::imread("image.jpg");
// 转为灰度图像
cv::Mat gray;
cv::cvtColor(image, gray, cv::COLOR_BGR2GRAY);
// 二值化
cv::Mat binary;
cv::threshold(gray, binary, 0, 255, cv::THRESH_BINARY | cv::THRESH_OTSU);
// 查找轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary, contours, cv::RETR_EXTERNAL, cv::CHAIN_APPROX_SIMPLE);
// 创建黑色背景图像
cv::Mat black = cv::Mat::zeros(image.size(), CV_8UC1);
// 绘制轮廓
cv::drawContours(black, contours, -1, cv::Scalar(255), cv::FILLED);
// 填充轮廓内部
for (auto& contour : contours) {
std::vector<std::vector<cv::Point>> fill_contours = {contour};
cv::fillPoly(black, fill_contours, cv::Scalar(255));
}
// 得到轮廓内的图像
cv::Mat result;
image.copyTo(result, black);
```
在上述代码中,首先将原始图像转为灰度图像并进行二值化处理,然后使用`findContours`函数查找轮廓,并使用`drawContours`函数将轮廓绘制在一张黑色背景图像上。接着使用`fillPoly`函数填充轮廓内部。最后使用`copyTo`函数将原始图像中轮廓内的像素复制到结果图像中。
阅读全文