在C中使用无符号字符表示数据

时间:2013-07-03 21:13:39

标签: c opencv character-encoding char

这是一个我不完全理解的功能,我想完全理解:

/**
 * 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]检索?

2 个答案:

答案 0 :(得分:1)

要了解信息的存储方式,您需要实现IplImage。

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

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

答案 1 :(得分:1)

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

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