c++opencv adaptiveThreshold后的图像怎么提取轮廓
时间: 2024-03-17 15:45:45 浏览: 65
要提取图像的轮廓,可以使用OpenCV中的findContours函数。在使用该函数之前,需要将图像进行二值化处理,可以使用adaptiveThreshold函数实现。
下面是一个示例代码:
```c++
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main()
{
// 读取图像并转换为灰度图像
Mat image = imread("input.jpg");
cvtColor(image, image, COLOR_BGR2GRAY);
// 二值化处理
Mat binary;
adaptiveThreshold(image, binary, 255, ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, 11, 2);
// 提取轮廓
vector<vector<Point>> contours;
findContours(binary, contours, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
// 绘制轮廓
Mat result(image.size(), CV_8UC3, Scalar(0,0,0));
drawContours(result, contours, -1, Scalar(0,0,255), 2);
// 显示结果
imshow("Input Image", image);
imshow("Binary Image", binary);
imshow("Result", result);
waitKey(0);
return 0;
}
```
在这个示例中,首先读入一张图像并将其转换为灰度图像。然后使用adaptiveThreshold函数进行二值化处理,得到一个二值化的图像。接着使用findContours函数提取轮廓,得到一个轮廓的vector。最后,使用drawContours函数在一张黑色背景上绘制轮廓,得到最终的结果。
阅读全文