gpt4 book ai didi

c++ - openCV:imshow 如何处理负值?

转载 作者:太空狗 更新时间:2023-10-29 20:03:51 28 4
gpt4 key购买 nike

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

  1. 如果图像是 8 位无符号的,则按原样显示。2.如果图片是16位无符号或32位整数,像素点除以256,即取值范围[0,255*256]映射到[0,255]。
  2. 如果图片是32位 float ,则像素值乘以255,即取值范围[0,1]映射到[0,255]。

如果我的矩阵在 32 位 float 中包含负值怎么办。它将如何对待它?

最佳答案

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 既不等于 CV_8S 也不等于 CV_16S,因此比例 == 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。

关于c++ - openCV:imshow 如何处理负值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25106843/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com