import cv2
image1 = cv2.imread('one.jpg', 0)
image2 = cv2.imread('two.jpg', 0)
diff = image1 - image2
对于上面的代码,在某些值时,由于减法而导致溢出。
例如:
238 - 254 = 240
我该怎么做才能防止这种溢出,而得到-16
作为答案呢?
import cv2
image1 = cv2.imread('one.jpg', 0)
image2 = cv2.imread('two.jpg', 0)
diff = image1 - image2
对于上面的代码,在某些值时,由于减法而导致溢出。
例如:
238 - 254 = 240
我该怎么做才能防止这种溢出,而得到-16
作为答案呢?
>>> import cv2
>>> img = cv2.imread('myimage.jpg', 0)
>>> img.dtype
dtype('uint8')
这意味着,正如您正确所述,它是一个无符号的8位整数,只能取0-255之间的值。
但是,您可以自动将数组转换为更好的dtype,这比执行int(value)更节省内存。 例如...
>>> img[0][0]
0
>>> img[0][0] -= 1
>>> img[0][0]
255 # since it's uint8
>>> img[0][0] += 1
>>> img2 = img.astype('uint16')
>>> img2[0][0] -= 1
>>> img2[0][0]
65535 # since it's uint16
您还可以将其转换为除uint8、16、32和64以外的其他类型。例如...
>>> img3 = img2.astype('int64') # signed int64
>>> img3[0][0] -= 7000000
>>> img3[0][0]
-6934465
cv2
库。cv2.imread()
函数将值作为 uint8
。 - Nancyint8
仍可能导致溢出或下溢,因为两个无符号8位值之间的最大距离可以是255(或-255)。 - BlackJackint8
很好地满足了需求。 - Nancy
cv2.imread()
函数,该函数返回Numpy数组。因此所有必要的信息都在上面的代码中。 - BlackJack