使用c++提取一个二值化图像的所有轮廓
时间: 2024-09-18 08:10:11 浏览: 39
在C++中,使用OpenCV库处理二值化图像并提取所有轮廓是非常常见的。以下是一个简单的示例,展示如何提取轮廓:
```cpp
#include <opencv2/opencv.hpp>
// 读取二值化图像
cv::Mat binaryImage = cv::imread("binary_image.png", cv::IMREAD_GRAYSCALE);
cv::Mat temp; // 临时矩阵,用于二值化处理
cv::threshold(binaryImage, temp, 128, 255, cv::THRESH_BINARY | cv::THRESH_OTSU); // 自动找到最佳阈值
// 转换为8位图像以便进行轮廓检测
binaryImage.convertTo(binaryImage, CV_8UC1, 255 / 256.0);
// 提取轮廓
std::vector<std::vector<cv::Point>> contours;
cv::findContours(binaryImage, contours, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);
// 打印轮廓的数量
int numContours = contours.size();
std::cout << "Number of contours found: " << numContours << "\n";
// 遍历轮廓并画出轮廓线
for (size_t i = 0; i < numContours; ++i) {
cv::drawContours(binaryImage, contours, i, Scalar(0, 0, 255), 2); // 红色轮廓线
}
// 显示结果
cv::imshow("Original Image with Contours", binaryImage);
cv::waitKey(0);
阅读全文