加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – openCV:如何看待负值?

发布时间:2020-12-16 09:53:40 所属栏目:百科 来源:网络整理
导读:根据文档,imshow将这样工作 如果图像是8位无符号,则按原样显示. 2.如果图像是16位无符号或32位整数,则像素除以256.即,值范围[0,255 * 256]被映射到[0,255]. 如果图像是32位浮点,则像素值乘以255.即,1]映射到[0,255]. 如果我的Matrix在32位浮点中包含负值,该
根据文档,imshow将这样工作

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

如果我的Matrix在32位浮点中包含负值,该怎么办?怎么治疗呢?

解决方法

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(黑色)

现在回答你的问题:

What if my Matrix contain negative value in 32-bit floating point. How it will treat it?

负值将显示为0.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读