如下图,提取两张图片的灰度做差,用abs()函数,理论上abs(235-241)=6,但是带上图片的就是250??why?
我猜250是256-6来的,256是8个比特数据能表示的范围,难道是负数的时候abs()函数直接取反码?
验证一下:
6的二进制码:0000 0110
取反码: 1111 1001
真特么是250!
但是,为什么abs(235-241)=6?
直接让这两的数相减吧
gauss_img[int(nextpt[0]),int(nextpt[1])]-gauss_img[int(prept[0]),int(prept[1])]
那不是abs()的问题
那是图片的保存位数是8位的,所以?
还果真是!!!!
int(gauss_img[int(nextpt[0]),int(nextpt[1])])-int(gauss_img[int(prept[0]),int(prept[1])])
改成这样就解决了,这个“灵异”bug害了我好久,掉了很多头发,为什么会这样呢?image里面的数据用8位无符号数表示的,这么简单的问题搞了半天,果然还是我太菜了。
网友评论