openCV: How imshow treat negative values?
根据文档,imshow将这样工作
2.如果图像是16位无符号或32位整数,则像素除以256.即,值范围[0,255 * 256]被映射到[0,255]。
如果我的Matrix在32位浮点中包含负值,该怎么办? 怎么治疗呢?
Open_CV源的关键位是
1 2 3 4 5 6 7 8 | #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(黑色)
现在回答你的问题:
What if my Matrix contain negative value in 32-bit floating point. How it will treat it?
负值将显示为0。