我正在尝试细分足球场。我正在关注一份研究报告
max(hist)
)问题是我不知道如何获得本地千里马。我正在尝试捕获直方图中的峰列表。
我已经在MatLab上尝试了它,效果很好,但是我需要在python中做。我已经尝试过像peakutils这样的库,但是没有任何东西可以给我想要的结果。
def field_area_mask(image):
# Convert to HSV
hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
# Capture the Hue Channel
hue = hsv[:, :, 0]
# Generate Histogram
hist = cv2.calcHist([hue],[0],None,[256],[0,256])
# Capture range
hist_range = hist[:121] # 0-120
hist_range = hist_range.reshape(1, -1)[0]
Hmax = max(hist_range)
plt.plot(hist_range)
HiMax = [] # Need to populate the local maxima's list
最佳答案
参见numpy.diff
从一阶导数中可以找到固定点。从二阶导数中,您可以确定这些点是局部最大值还是最小值。
示例:给出直方图
[1, 2, 1, 3, 7, 10, 7, 2] // 0-based index
一阶导数是
[1, -1, 2, 4, 3, -3, -5] // 1-based index
符号在第二,第三和第六个元素处发生变化。
二阶导数是
[-2, 3, 2, -1, -6, -2] // 2-based index
第二个元素的符号是(-),局部最大值
第三个元素的符号是(+),本地最小值
第6个元素的符号是(-),局部最大值
全局最大值为10,因此您的阈值为%20 * 10 =2。第二个元素应被视为局部最大值。
关于python - 直方图的全局和局部极大值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57220504/