4

为什么我不能通过

    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 )

更新

好的,好的,我记住了这个东西:)

4

4 回答 4

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等对于您的变量来说并不是很幸运的名称。尝试选择更有意义的名称......如果不是为了您自己,那么为了该代码的未来读者而这样做:)

于 2013-06-16T20:57:10.090 回答
2

因为他们不是一回事。polylines要求一个指向 的指针的指针Point但你给它一个指向数组 [4] 的指针Point

改写:当您src像这样使用表达式时,它会从数组衰减为指针。在这种情况下,它将从Point[1][4]into衰减Point(*)[4],即指向类型为 4 的数组的指针Point。这是 4 个Point对象的内存位置。polylines期望指向对象的指针的内存位置Point

于 2013-06-16T20:56:08.993 回答
1

Array-of-arrays 和pointer-to-pointers 并不意味着相同的内存布局。数组数组包含其所有连续元素,而指向指针的指针需要一个连续指针数组,这些指针指向(可能是非连续的)连续元素数组。

要进行这种转换,您需要分配一个指针数组并让它们指向您的数组数组中的正确条目。在您的情况下,由于您有一组值,因此更简单:

Point * pointer = &src[0][0];
int npts = 4;
polylines(img, &pointer, &npts, 1, ...);

Assumingncontours是指针对指针所指向的指针的数量,并且npts是各个指针所指向的点的数量。

于 2013-06-16T20:57:22.480 回答
0

请检查这个问题:将 char[][] 转换为 char** 会导致段错误?

简短的回答:你不应该那样做

于 2013-06-16T21:12:45.140 回答