假设我有一排点
Mat_<Point> src(1,4);
src << Point(border,border), Point(border,h-border), Point(w-border,h-border), Point(w-border,h-border);
现在我想将此行传递给接受InputArrayOfArrays
. 在我的情况下,它应该是一个数组的数组。
如何将点行转换为这种类型?
假设我有一排点
Mat_<Point> src(1,4);
src << Point(border,border), Point(border,h-border), Point(w-border,h-border), Point(w-border,h-border);
现在我想将此行传递给接受InputArrayOfArrays
. 在我的情况下,它应该是一个数组的数组。
如何将点行转换为这种类型?
您可以将此函数的另一种形式用于 C 数组。第一个数组的大小应为 1,内部数组的大小应为 4,并包含您的点。
您也可以尝试相同的方法并传递 avector<vector<Point> >
而不是 C 数组。
在 OpenCV ArrayOfArrays 通常意味着某物的向量(Mat 或另一个向量)。
更新:InputArrayOfArrays 也只是 InputArray 的 typedef。所以你可以尝试通过一个vector<Point>
. 它不适用于需要 InputArrayOfArrays 的每个函数,但它应该适用于 polylines()。我没有测试过,所以请提供你的结果。
也许有人会发现它作为一个起点很有用。我花了将近一整天的时间寻找解决方案。最后我可以用折线和填充多边形绘制。我不得不承认这不是有点烦人。
t2 包含 3 个点。所以这给pt增加了3分。
vector<Point> pt;
for(int ao=0; ao<t2.size(); ao++){
pt.push_back( t2.at(ao) );
}
polylines(image,pt,false,Scalar(255,255,255),2,150,0);
这使用 fillPoly 只是为了填充一个三角形
Point pt[1][3];
//set one point into pt matrix
pt[0][0].x = yourvalue_x;
pt[0][0].y = yourvalue_y;
//set onother point into pt matrix
pt[0][1].x = yourvalue_x;
pt[0][1].y = yourvalue_y;
//set onother point into pt matrix
pt[0][2].x = yourvalue.x;
pt[0][2].y = yourvalue.y;
//adding 2 times (i have one triangle ) but
ppt can contains many more polygons
//const Point* ppt[2] = {pt[0], pt[1], ... };
//i used only one triangle as a test
const Point* ppt[2] = {pt[0], pt[0]};
int npt[] = {3, 3};
fillPoly(atom_image, ppt, npt, 1, (255,0,255));