赞
踩
#include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem> bool opencvTool::drawPolygon(std::string image_p, std::vector<cv::Point> points) { cv::Mat ima = cv::imread(image_p.c_str()); // 读取图像,替换为你的图片路径 cv::Scalar red = cv::Scalar(0, 0, 255); // Red color cv::Scalar blue = cv::Scalar(255, 0, 0); // Red color int thickness = 2; // 使用polylines函数给图片绘制多边形 cv::polylines(ima, points, true, red, thickness, 8, 0); // 填充颜色 cv::fillPoly(ima, std::vector<std::vector<cv::Point>>{points}, blue, 8, 0); cv::imwrite(image_p.c_str(), ima); return true; } bool opencvTool::drawPolygon(cv::Mat& image, std::vector<cv::Point> points, int lineWidth) { if (image.empty()) { std::cout << "Error: empty mat" << std::endl; return false; } // 确保多边形点的数量大于等于3 if (points.size() < 3) { std::cout << "Error: need at least 3 points to draw a polygon" << std::endl; return false; } // 绘制多边形 cv::polylines(image, points, true, cv::Scalar(0, 0, 255), lineWidth); return true; }
// 在图像上绘制多边形并设置线条宽度 static bool drawPolygon(cv::Mat& image, std::vector<cv::Point> points, int lineWidth = 1) { if (image.empty()) { std::cout << "Error: empty mat" << std::endl; return false; } // 确保多边形点的数量大于等于3 if (points.size() < 3) { std::cout << "Error: need at least 3 points to draw a polygon" << std::endl; return false; } // 将多边形点转换为 OpenCV 的 Point 数组 cv::Point *pts = new cv::Point[points.size()]; for (size_t i = 0; i < points.size(); ++i) { pts[i] = points[i]; } // 绘制多边形 const cv::Point* ppt[1] = { pts }; int npt[] = { static_cast<int>(points.size()) }; cv::polylines(image, ppt, npt, 1, true, cv::Scalar(255, 255, 255), lineWidth); delete[] pts; return true; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。