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

我意识到 anunsigned char可以表示从 0 到 255 的数字,但检索的部分是unsigned char什么?data[1]

4

2 回答 2

1

要了解信息是如何存储的,您需要实现 IplImage。

data 实际上是一个指向 unsigned char 的指针。没有人说它只有 1 个字符。它可能是字符数组。所以 data[1] 是数组中的第二个元素。

另外,根据我的说法, + 运算符不做数字的总和,它会产生总和指针地址。

于 2013-07-03T21:18:23.827 回答
1

看起来该图像中的每个像素都是 3 个字节(如设置数据指针时的 3*x 所示)。

所以 data[0], data[1], data[2] 是这 3 个字节中的每一个,每个字节都是 0 到 255 之间的无符号整数?

于 2013-07-03T21:19:59.533 回答