通过这里的一些帮助,我想出了一个函数,该函数似乎将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/

10-09 19:08