#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);returntrue;}bool opencvTool::drawPolygon(cv::Mat& image, std::vector<cv::Point> points,int lineWidth){if(image.empty()){
std::cout <<"Error: empty mat"<< std::endl;returnfalse;}// 确保多边形点的数量大于等于3if(points.size()<3){
std::cout <<"Error: need at least 3 points to draw a polygon"<< std::endl;returnfalse;}// 绘制多边形
cv::polylines(image, points,true, cv::Scalar(0,0,255), lineWidth);returntrue;}
// 在图像上绘制多边形并设置线条宽度staticbooldrawPolygon(cv::Mat& image, std::vector<cv::Point> points,int lineWidth =1){if(image.empty()){
std::cout <<"Error: empty mat"<< std::endl;returnfalse;}// 确保多边形点的数量大于等于3if(points.size()<3){
std::cout <<"Error: need at least 3 points to draw a polygon"<< std::endl;returnfalse;}// 将多边形点转换为 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;returntrue;}
cv::Point *pts = new cv::Point[points.size()];: 这行代码创建了一个动态分配的 cv::Point 数组,数组的大小等于传入的顶点数量 points.size()。这个数组将用于存储多边形的顶点坐标。
for (size_t i = 0; i < points.size(); ++i): 这是一个 for 循环,用于遍历传入的顶点向量 points 中的每个顶点。
安装基本依赖
// 注意OrbitControls要加{},注意路径是jsm import { OrbitControls } from ‘three/examples/jsm/controls/OrbitControls.js’; // import { dat } from ‘three/examples/jsm/controls/dat.gui.js’; // dat gui这个插件,是另外自己下载…