这是一个我不完全理解的功能,我想完全理解:
/**
* 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]
检索?
答案 0 :(得分:1)
要了解信息的存储方式,您需要实现IplImage。
数据实际上是指向unsigned char的指针。没人说它只有1个字符。它可能是一系列的字符。所以data [1]是数组中的第2个元素。
另外,据我说+运算符不做数字之和,它会产生和指针地址。
答案 1 :(得分:1)
看起来该图像中的每个像素都是3个字节(在设置数据指针时由3 * x表示)。
因此数据[0],数据[1],数据[2]是这3个字节中的每一个,每个字节都是0到255之间的无符号整数?