我正在尝试通过opencv python中的Sobel函数获取渐变的方向。问题是,当我向相位函数提供x和y方向上的梯度时,无论相位为真还是假,它总是给我相同的结果。这是示例代码:
img = cv2.imread('frameBB.jpg',0)
sobelx = cv2.Sobel(img,cv2.CV_32F,1,0,ksize=3)
sobely= cv2.Sobel(img,cv2.CV_32F,0,1,ksize=3)
phase=cv2.phase(sobelx,sobely,True)
然后,我得到相位的直方图,最后得到相同的结果,即相位函数的最后一个参数为True或False。两种情况下的直方图都是这样。
这是原始图像及其渐变图像的样子:
我不确定我在这里做错了什么,以及为什么在两种情况下都得到弧度的梯度角。
最佳答案
从文档here中可以看到cv2.phase:
cv2.phase(x, y[, angle[, angleInDegrees]])
实际上,第三个位置参数不是用于指定度数/弧度的,而是用于输出数组。您要更改的参数是
angleInDegrees
。您可以将其指定为第4个位置参数,也可以使用如下关键字来更清楚地将其指定为:cv2.phase(sobelx,sobely,angleInDegrees=True)
关于python - cv2.phase以弧度给出角度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38961957/