openCV:imshow如何看待负面价值?

时间:2014-08-03 16:46:40

标签: c++ opencv

根据文档,imshow将像这样工作

  1. 如果图像是8位无符号,则按原样显示。 2.如果图像是16位无符号或32位整数,则像素除以256.即,值范围[0,255 * 256]映射到[0,255]。
  2. 如果图像是32位浮点,则像素值乘以255.即,值范围[0,1]映射到[0,255]。
  3. 如果我的Matrix在32位浮点中包含负值,该怎么办?它将如何对待它?

1 个答案:

答案 0 :(得分:7)

Open_CV源的关键位是

#define CV_8S   1
#define CV_32S  4
#define CV_32F  5

double scale = src_depth <= CV_8S ? 1 : src_depth <= CV_32S ? 1./256 : 255;
double shift = src_depth == CV_8S || src_depth == CV_16S ? 128 : 0;

dst[x] = saturate_cast<DT>(src[x]*scale + shift);

最终imshow在显示它之前创建一个CV_8 Mat,所以saturate_cast,当DT是uchar时,将参数钳位到0和255。

对于浮点深度== CV_32F:

  • src_depth低于CV_8S和CV_32S,因此scale == 255(与doco一致)。
  • src_depth ia既不等于CV_8S也不等于CV_16S,所以scale == 0。

这意味着CV_32F

  • 大于1.0的值最终为255(白色)
  • 负值最终为0(黑色)

现在回答你的问题:

  

如果我的Matrix在32位浮点中包含负值,该怎么办?它将如何对待它?

负值将显示为0。