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++

ここでの実際の解決策は、C スタイルの array の代わりに STL コンテナーを使用することですstd::vector

typedef std::vector<Point> Shape;
std::vector<Shape> myShapes;
...

ポインターconstの代わりに参照渡しします。const

void polylines(Mat& img, const std::vector<Shape>& shapes, ...)

srcまた、nspts、 などは、変数の幸運な名前ではないことに注意してください。より意味のある名前を選択してみてください...あなた自身のためではない場合は、そのコードの将来の読者のためにそれを行ってください:)

于 2013-06-16T20:57:10.090 に答える
2

それらは同じものではないからです。へのポインターへのポインターpolylinesを要求しますが、配列[4] へのポインターを与えています。PointPoint

言い換えるsrcと、このような式として使用すると、配列からポインターに減衰します。この場合、 から に減衰しPoint[1][4]ますPoint(*)[4]。つまり、 型のサイズ 4 の配列へのポインタPointです。これは、4 つのPointオブジェクトのメモリ ロケーションです。オブジェクトへのポインタpolylinesのメモリ位置が必要です。Point

于 2013-06-16T20:56:08.993 に答える
1

配列の配列とポインターからポインターへのポインターは、同じメモリ レイアウトを意味しません。array-of-array にはすべての要素が連続して含まれますが、pointer-to-pointers には、連続する要素の (場合によっては非連続の) 配列を指す連続したポインターの配列が必要です。

その変換を行うには、ポインターの配列を割り当て、それらが配列の配列内の正しいエントリを指すようにする必要があります。あなたの場合、単一の値セットがあるため、さらに簡単です。

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

ncontoursはポインターツーポインターが指すポインターnptsの数であり、 は個々のポインターが指すポイントの数であると仮定します。

于 2013-06-16T20:57:22.480 に答える
0

この質問を確認してください: char[][] を char** にキャストすると segfault が発生しますか?

簡単な答え:絶対にやるべきではありません

于 2013-06-16T21:12:45.140 に答える