【发布时间】:2017-05-19 05:47:07
【问题描述】:
使用matplotlib 如何生成和显示图像梯度大小和方向的直方图?
我不知道的一件事是 x 轴限制;幅度应该是0到1吗?即,边缘的强度在 0 和 1 之间?对于方向,我假设 x 轴范围为 0 到 360(度)还是应该做弧度?
以下是我如何生成渐变、幅度和方向。我现在如何将每个显示为直方图?
def get_gradient(src):
sobelx = cv2.Sobel(src,cv2.CV_64F,1,0,ksize=5)
sobely = cv2.Sobel(src,cv2.CV_64F,0,1,ksize=5)
grad = sobelx + sobely
mag = cv2.magnitude(sobelx, sobely) # so my Mat element values could be anything between 0 and 1???
ori = cv2.phase(sobelx, sobely, True) # so my Mat element values could be anything between 0 and 360 degrees???
return [grad, mag, ori]
grad_res = get_gradient(src)
# number of bins is 100 from 0 to 1. Ie, 0.001, 0.002, ... 1.000
# am I correct?
mag_hist = cv2.calcHist([grad_res[1]],[0],None,[100],[0,1])
ori_hist = cv2.calcHist([grad_res[2]],[0],None,[360],[0,360])
plt.plot(mag_hist)
plt.xlim([0,1])
plt.plot(ori_hist)
plt.xlim([0,360])
plt.show()
编辑:上述代码的当前错误:
mag_hist = cv2.calcHist([梯度[1]],[0],无,[10],[0,100]) 错误:C:\projects\opencv-python\opencv\modules\imgproc\src\histogram.cpp:1422:错误:(-210) in function cv::calcHist
【问题讨论】:
-
同时附上当前输出和预期输出?
-
@ZdaR 我已经添加了错误输出。预期的输出是绘制的直方图。
-
@AlexanderReynolds 谢谢,我会调查的。关于我的幅度 Mat - 梯度幅度值(0-1 或 0-255、0-n)的值范围是多少?即
cv2.magnitude(sobelx, sobely)的输出 -
@JakeM 抱歉,我删除了评论,因为他们正在重新创建垃圾箱并绘制它们,但它没有回答您发布的问题。但是,我发布的答案应该可以帮助您! :)
标签: python opencv matplotlib