为什么我不能通过
Point src[1][4] = {
{
Point(border,border), Point(border,h-border), Point(w-border,h-border), Point(w-border,h-border)
}
};
作为
polylines(frame, src, ns, 1, true, CV_RGB(255,255,255), 2);
,其中
折线有原型
void polylines(Mat& img, const Point** pts, const int* npts, int ncontours, bool isClosed, const Scalar& color, int thickness=1, int lineType=8, int shift=0 )
更新
好的,好的,我记得这些东西:)
答案 0 :(得分:4)
Point[1][4]
无法以这种方式转换为Point**
看看这个问题:Converting multidimensional arrays to pointers in c++
这里的实际解决方案是 使用STL容器而不是C风格的数组 ,例如std::vector
:
typedef std::vector<Point> Shape;
std::vector<Shape> myShapes;
...
并通过const
引用而不是const
指针传递它:
void polylines(Mat& img, const std::vector<Shape>& shapes, ...)
另请注意,src
,ns
,pts
等不是您的变量的非常幸运的名称。尝试选择更有意义的名字......如果不是为了你自己,那么为了未来的代码读者而这样做:)
答案 1 :(得分:2)
因为他们不是一回事。 polylines
要求指向指针到Point
的指针,但是你给它指向Point
的数组[4]的指针。
重新说明:当你使用src
作为这样的表达式时,它会从数组衰减成指针。在这种情况下,它将从Point[1][4]
衰减到Point(*)[4]
,即指向类型为Point
的大小为4的数组的指针。这是4个Point
对象的内存位置。 polylines
期望指针的内存位置为Point
对象。
答案 2 :(得分:1)
数组数组和指针指针并不意味着相同的内存布局。数组数组包含连续的所有元素,而指针指针需要一个连续指针数组,这些指针指向(可能是非连续的)连续元素数组。
要进行转换,您需要分配一个指针数组,并让它们指向数组数组中的正确条目。在您的情况下,由于您只有一组值,因此更简单:
Point * pointer = &src[0][0];
int npts = 4;
polylines(img, &pointer, &npts, 1, ...);
假设ncontours
是指向指针的指针数,npts
是各个指针所指向的点数。
答案 3 :(得分:0)
请检查此问题:casting char[][] to char** causes segfault?
简短回答:你永远不应该这样做