Python数组减法循环回到高数而不是给出负值

标签 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

基本上,如果我的 q 数组中的值大于 p,减法循环回到 256 并减去那里剩下的内容。如果减法变为负数,我宁愿得到 0 的值。有人知道这样做的好方法吗?

最佳答案

您可以更改为支持负整数的 int16 并将负值设置为 0,您的值正在换行,因为您有 uint8:

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]

要更改数组,您可以使用 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)

或者也可以使用 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]

关于Python数组减法循环回到高数而不是给出负值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29721994/

相关文章:

python - Pandas 在 MultiIndex DataFrame 中选择特定的低级列

python - 在 reStructuredText 中制作编号列表

python - 使用快速傅立叶变换生成相关随机势

java - 将对象数组转换为泛型类型

c++ - 同时从多个流中捕获,最好的方法以及如何减少 CPU 使用率

python - 正确安装pyPDF2后导入错误

python - 如何在空值上折叠 pandas 中的列?

jquery - 使用jquery有效地对对象和数组进行排序

通过 SSH 运行的 Python OpenCV 脚本(请求失败的 X 错误 : BadRequest)

opencv - SIFT 未在 OpenCV 中的引用图像中找到任何特征