Point PointSet[5] = { Point(100,100),Point(350,100),Point(450,280),Point(320,450),Point(80,400) };
Point* SetPointer = &PointSet[0];
polylines(emptyImg, SetPointer, true, Scalar(255, 0, 0), -1, LINE_8, 0);
// 为什么这里 用 Point 申请一个数组 polylines 函数不可以用,即 第二个参数传入有误
// 但是用 vector<Point> 申请一个数组就可以用
因为opencv规定cv::polylines的第二个参数即你说的Point,它的类型必须是InputArrayOfArrays
而这个InputArrayOfArrays在cv中的定义追根溯源是_InputArray,虽然_InputArray可以有以下多种方式,但polylines采用的是蓝色框这种,所以不能用指向point数组的指针
在 OpenCV 中,可以使用 cv::polylines 函数绘制多边形。该函数如下:
void cv::polylines(InputOutputArray img, InputArrayOfArrays pts, bool isClosed, const Scalar& color, int thickness = 1, int lineType = LINE_8, int shift = 0)
其中:
img:要绘制多边形的图像。
pts:一个包含多个多边形顶点坐标的数组,需要是一个二维数组,其中每一行对应一个多边形。
isClosed:指定多边形是否闭合,即是否连接首尾顶点。
color:多边形的颜色。
thickness:多边形线条的粗细。
lineType:线条的类型,比如是实线、虚线等。
shift:顶点坐标的位置精度。
以下是一个简单的例子,绘制了一个多边形:
#include <opencv2/opencv.hpp>
#include <iostream>
int main(int argc, char* argv[]) {
// Create a black image
cv::Mat image = cv::Mat::zeros(500, 500, CV_8UC3);
// Define the polygon points
std::vector<cv::Point> polygon;
polygon.push_back(cv::Point(100, 100));
polygon.push_back(cv::Point(200, 50));
polygon.push_back(cv::Point(300, 100));
polygon.push_back(cv::Point(400, 200));
polygon.push_back(cv::Point(150, 300));
// Draw the polygon
cv::polylines(image, polygon, true, cv::Scalar(255, 0, 0), 2);
// Display the image
cv::imshow("Polygon", image);
cv::waitKey(0);
return 0;
}
在此代码中,我们首先创建了一张黑色的图像,然后定义了一个多边形的顶点数组。最后使用 cv::polylines 函数绘制多边形,并将其显示在窗口中。
该回答引用ChatGPT
请参考下面的解决方案,如果可行还请点击,采纳,感谢!
使用 OpenCV 在 C++ 中绘制一个多边形:
#include <opencv2/opencv.hpp>
int main() {
// 创建一个 400x400 的图像
cv::Mat image(400, 400, CV_8UC3, cv::Scalar(255, 255, 255));
// 创建多边形顶点数组
std::vector<cv::Point> vertices;
vertices.push_back(cv::Point(100, 100));
vertices.push_back(cv::Point(200, 200));
vertices.push_back(cv::Point(300, 100));
vertices.push_back(cv::Point(300, 300));
vertices.push_back(cv::Point(100, 300));
// 绘制多边形
cv::polylines(image, vertices, true, cv::Scalar(0, 0, 255), 2);
// 显示图像
cv::imshow("Polygon", image);
cv::waitKey(0);
return 0;
}
其中,cv::polylines 函数的第一个参数是目标图像,第二个参数是多边形顶点数组,第三个参数指定是否将多边形封闭,第四个参数是颜色,第五个参数是线宽。
另外,这个函数里面线条粗细不能选-1,无法像绘制其他图像那样使用-1表示填充的,