调用cvSet2D()来设置图像的像素值返回值0

时间:2012-09-25 08:45:41

标签: c++ image-processing opencv

当我使用cvSet2D()设置图像的像素值时:

Iplimage* image=cvLoadImage("....");
CvScalar scalar(0.1415, 0, 0, 0);
cvSet2D(image, 0,0,scalar);

double pixelValue=cvGet2D(image, 0, 0).val[0];

pixelValue原来是0。为什么?有人可以给我一个解释吗?

1 个答案:

答案 0 :(得分:3)

您正在处理8位图像(加载方式为3通道,没有任何标记),这意味着对于每个通道,您的值都在[0,255]范围内。因此,即使您指定了float值,也只能拥有uchar,因此您的0.1415变为0。

如果您有float CvMat,那么您可以指定float个值。例如:

CvMat* matrix = cvCreateMat(10, 10, CV_32F);
CvScalar scalar(0.1415, 0, 0, 0);
cvSet2D(matrix, 5, 5, scalar);
double pixelValue = cvGet2D(matrix, 5, 5).val[0];  // Now pixelValue = 0.1415

如果您想使用float张图片,请检查this questionthis post