通过这里的一些帮助,我想出了一个函数,该函数似乎将sobel导数应用于X方向上的图像F(x,y) = F(x+1,y) - F(x,y)
我不能使用任何OpenCV函数,我需要2D输出数组比2D输入数组短1列。
但是,我不知道为什么它仍然不返回短1列的输出数组。有人可以发现问题并/或告诉我这是否在正确的轨道上?非常感谢。
output = input[:-1,:]
r,c = input.shape
for i in range(0, r - 1):
output[i] = np.abs(input[i+1] - input[i])
return output
最佳答案
您可以使用numpy的diff()函数。请参见its doc here。
还有一个代码片段来说明其用法:
import numpy as np
a = np.ones([5, 4])
b = np.diff(a, axis=1)
结果b是一个充满零的(5,3)数组。
如果要保持循环,可以执行以下操作:
r,c = input.shape
output = np.zeros([r-1, c])
for i in range(0, r - 1):
output[i] = np.abs(input[i+1] - input[i])
print output
编辑:“数学” x对应第二个轴(垂直),y对应第一个轴(水平)。因此,要获得F(x + 1,y)-F(x,y),您必须执行以下操作:
r,c = input.shape
output = np.zeros([r, c -1])
for j in range(0, c - 1):
output[:, j] = np.abs(input[:, j+1] - input[:, j])
print output
关于python - Python-Sobel X衍生品,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32643388/