opencv 画一个vector<point>轮廓在图中
时间: 2024-10-09 17:14:58 浏览: 22
OpenCV(Open Source Computer Vision Library)是一个开源计算机视觉库,用于实时图像处理、机器学习等应用。要在OpenCV中画一个`std::vector<cv::Point>`表示的轮廓,你需要使用`imdraw`函数以及轮廓的边界信息。以下是一个简单的示例:
```cpp
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
cv::Mat img = cv::imread("input_image.jpg"); // 加载图片
if (img.empty()) {
std::cerr << "Could not open or find the image" << std::endl;
return -1;
}
// 假设contours是一个存储轮廓点的vector,例如从findContours函数得到的结果
std::vector<std::vector<cv::Point>> contours;
// 检查是否找到轮廓
if (!contours.empty()) {
// 获取第一个轮廓(如果有多个轮廓,可能需要遍历并选择你需要的)
const auto& contour = contours[0];
// 创建一个白色背景的透明窗口
cv::Mat mask(img.size(), CV_8UC3, cv::Scalar(0, 0, 0), cv::BORDER_TRANSPARENT);
cv::Mat filledContour;
// 使用fillConvexPoly填充轮廓
cv::fillConvexPoly(mask, contour, cv:: Scalar(255, 0, 0), 8); // 绘制轮廓为红色
// 将轮廓绘制到原图上
cv::bitwise_and(img, img, filledContour, mask);
// 显示结果
cv::imshow("Image with Contour", img);
cv::waitKey(0);
} else {
std::cout << "No contours found in the image." << std::endl;
}
```
在这个例子中,首先加载图像,然后获取`findContours`函数返回的轮廓。如果找到了轮廓,我们将轮廓点转换成`cv::Rect`或`cv::RotatedRect`以便更好地渲染,然后用`fillConvexPoly`函数在黑色背景下填充轮廓,最后通过位运算将轮廓画在原始图像上。
阅读全文