skr*_*hee 5 python arrays opencv numpy subtraction
这是我的代码:我正在使用 numpy 和 opencv
q = np.array(image)
q = q.reshape(-1, q.shape[2])
r = np.subtract(q,p)
print r
Run Code Online (Sandbox Code Playgroud)
基本上发生的情况是,如果 q 数组中的值大于 p,则减法循环回到 256 并减去那里剩下的值。如果减法为负值,我宁愿得到 0 值。有人知道这样做的好方法吗?
您可以更改为支持负整数的 int16 并将负值设置为 0,您的值正在换行,因为您有uint8's
:
arr1 = np.array([100, 200, 255],dtype=np.int16)
arr2 = np.array([180, 210, 100],dtype=np.int16)
sub_arr = np.subtract(arr1, arr2)
sub_arr[sub_arr < 0] = 0
print(sub_arr)
[ 0 0 155]
Run Code Online (Sandbox Code Playgroud)
要更改数组,您可以使用array.astype(np.int16)
从 更改uint8
为np.int16
并在减去后使用相同的方法再次更改回来。
arr1 = np.array([100, 200, 255],dtype=np.uint8)
arr2 = np.array([180, 210, 100],dtype=np.uint8)
_arr2 = arr2.astype(np.int16)
sub_arr = np.subtract(arr1, _arr2)
sub_arr[sub_arr < 0] = 0
sub_arr = sub_arr.astype(np.uint8)
print(sub_arr)
Run Code Online (Sandbox Code Playgroud)
或者也使用np.clip:
arr1 = np.array([100, 200, 255],dtype=np.uint8)
arr2 = np.array([180, 210, 100],dtype=np.uint8)
sub_arr = np.subtract(arr1, arr2.astype(np.int16)).clip(0, 255).astype(np.uint8)
print(sub_arr)
[ 0 0 155]
Run Code Online (Sandbox Code Playgroud)