2个uint8相减仍然得到uint8

95 篇文章 0 订阅
4 篇文章 0 订阅

2个uint8相减,如果是负数(溢出),得到的不是真实结果。

  • 1、将uint8转成int16/int32 再做差,但返回的数值类型不是uint8
  • 2、使用opencv中的absdiff ,返回的仍然是uint8
import numpy as np
import cv2

fil = -1 + 2*np.random.random((5,5))
fil=np.asarray(fil,np.float32)

# print(fil,'\n\r')
def distance(x):
    x=x.astype(np.int16)
    return x-x[0]

fil_uint8=((fil+1)/2*256).astype(np.uint8) # [0,255]
print(fil_uint8,'\n\r')

fi_a=fil_uint8[0]

# uint8 --->int16
print(distance(fil_uint8),'\n\r')

# 使用absdiff
l=list([fi_a])*len(fil_uint8)
l=np.asarray(l,np.uint8)
c=cv2.absdiff(fil_uint8,l)
print(c)
print(c.dtype)

输出结果:

[[ 45  43 147 239 162]
 [227  12  81 135  62]
 [239 137 246 237  88]
 [200 176 141 197 187]
 [227 100  24  97 175]] 

[[   0    0    0    0    0]
 [ 182  -31  -66 -104 -100]
 [ 194   94   99   -2  -74]
 [ 155  133   -6  -42   25]
 [ 182   57 -123 -142   13]] 

[[  0   0   0   0   0]
 [182  31  66 104 100]
 [194  94  99   2  74]
 [155 133   6  42  25]
 [182  57 123 142  13]]

uint8
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值