0

これは私が完全に理解していない機能であり、完全に理解したいと思っています:

/**
 * Returns: the label of a vertex in the given image at location (x, y).
 *          0 = unlabeled vertex at location (x, y)
 *          1 = background label at location (x, y)
 *          2 = object/foreground label at location (x, y)
 */
int getLabelAtVertexXY(IplImage* image, int x, int y) {
uchar* data = (uchar*) image->imageData + y * image->widthStep + 3 * x;
if (data[2] < 128 && data[1] < 128)
    return 0;
else if (data[1] > data[2])
    return 1; // TODO: data[1] holds probability in background starting at 128-255?
else
    return 2; 
}

画像の各ピクセルには 0、1、または 2 のラベルが付けられています。その情報はunsigned charポインタにどのように格納されていますdataか?

unsigned charは 0 から 255 までの数字を表すことができますが、 のどの部分がunsigned char取得data[1]されるのでしょうか?

4

2 に答える 2

1

情報がどのように保存されるかを理解するには、IplImage の実​​装が必要です。

data は実際には unsigned char へのポインタです。たった1文字になるとは誰も言っていません。文字の配列である可能性があります。したがって、data[1] は配列の 2 番目の要素です。

また、私によると、 + 演算子は数値の合計を行わず、ポインターアドレスの合計を作成します。

于 2013-07-03T21:18:23.827 に答える