当我使用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
。为什么?有人可以给我解释吗? 最佳答案
您正在处理一个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 question和this post。关于c++ - 调用cvSet2D()以设置图像的像素值将返回值0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12579274/