0

假设我有一排点

Mat_<Point> src(1,4);
src << Point(border,border), Point(border,h-border), Point(w-border,h-border), Point(w-border,h-border);

现在我想将此行传递接受InputArrayOfArrays. 在我的情况下,它应该是一个数组的数组。

如何将点行转换为这种类型?

4

2 回答 2

1

您可以将此函数的另一种形式用于 C 数组。第一个数组的大小应为 1,内部数组的大小应为 4,并包含您的点。

您也可以尝试相同的方法并传递 avector<vector<Point> >而不是 C 数组。

在 OpenCV ArrayOfArrays 通常意味着某物的向量(Mat 或另一个向量)。

更新:InputArrayOfArrays 也只是 InputArray 的 typedef。所以你可以尝试通过一个vector<Point>. 它不适用于需要 InputArrayOfArrays 的每个函数,但它应该适用于 polylines()。我没有测试过,所以请提供你的结果。

于 2013-06-16T20:20:26.187 回答
0

也许有人会发现它作为一个起点很有用。我花了将近一整天的时间寻找解决方案。最后我可以用折线和填充多边形绘制。我不得不承认这不是有点烦人。

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));

于 2021-02-13T23:18:19.333 回答